この質問は、文字エンコーディングに関する私の無知を明らかにする可能性があります。任意の文字列をASCIIに変換する、バックスラッシュを削除する
私は新しいアプリケーションから古いアプリケーションに文字列をリレーしています。古いアプリケーションはASCII文字(http://www.asciitable.com/)のみを受け入れます。古いアプリケーションは、バックスラッシュなどの特定の文字もサポートしていません。新しいアプリケーションは多かれ少なかれサポートしています。
のは、私は、文字列があるとしましょう:
"何であれ - 1_の夜_"
私はASCII文字だけで何かにそれを変換する必要があります。たとえば、次のようなものがあります。
「何でも - 1_ \ u001cY = = ??? = ??? = ???」
次に、残りの不正な文字を置換文字列に置き換えたいとします。
理想的には、ASCIIにエンコードされたすべての文字は、デコードできなければなりません。つまり、一意の入力文字列には一意の出力文字列があります(任意の入力 "abc"と "xyz"は同じではなく、同じ結果を生成します)。アルゴリズムは、出力文字列を入力文字列に変換することができます。
これは私が試したものです:
static string ConvertToAscii(string str)
{
var return_string = "";
foreach (var c in str)
{
if ((int)c < 128)
{
return_string += c;
}
else
{
var charBytes = BitConverter.GetBytes(c);
var ascii = Encoding.ASCII.GetString(charBytes);
return_string += ascii;
}
}
return return_string;
}
私は、上記の文字列でこれを使用すると、私が手:
「何であれ - 1_ \ u001cY _ = ??? = ?? ?= ??? "
しかし、 "\ u001cY"は明らかにASCII文字の集合ではなく、単一の文字です。だから私のターゲットデータベースはそれを拒否し、残りの文字を残して "\"を取り除く方法を見つけることができません。
どのように文字列をASCII文字の集合に変換できますか? - あなたの文字列の結果を
Convert.ToBase64String(Encoding.Unicode.GetBytes("Whatever - 1_夜_"))
ASCII(でも印刷可能なASCII)であることが保証された結果を生成します:
あなたはこの[topic](https://stackoverflow.com/questions/4352209/conversion-from-utf8-to-ascii)を見たことがありますか? –
"ASCIIにエンコードされた文字はすべてデコードできなければなりません" - 0-127の範囲外の文字をどのように表現するかを示すサンプル(ASCII)は、誰かが答えを出すのに役立ちます。 –
あなたが言うとき...私のターゲットデータベースはそれを拒否します...あなたは、古いソフトウェアが印刷できないASCII文字で動作することは確かですか? ASCIIの最初の32文字は印刷不可能なので、実際にそれを表示しています。これらは制御文字と呼ばれます。 – raudelravelo91