2017-12-22 21 views
0

この質問は、文字エンコーディングに関する私の無知を明らかにする可能性があります。任意の文字列を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)であることが保証された結果を生成します:

+1

あなたはこの[topic](https://stackoverflow.com/questions/4352209/conversion-from-utf8-to-ascii)を見たことがありますか? –

+0

"ASCIIにエンコードされた文字はすべてデコードできなければなりません" - 0-127の範囲外の文字をどのように表現するかを示すサンプル(ASCII)は、誰かが答えを出すのに役立ちます。 –

+0

あなたが言うとき...私のターゲットデータベースはそれを拒否します...あなたは、古いソフトウェアが印刷できないASCII文字で動作することは確かですか? ASCIIの最初の32文字は印刷不可能なので、実際にそれを表示しています。これらは制御文字と呼ばれます。 – raudelravelo91

答えて

0

最も簡単な方法は、あなたが文字列がどのように表されるかを気にしていないようですので、すべてのバイトがBase64であります「VwBoAGEAdABlAHYAZQByACAALQAgADEAXwAcWV8APdim3D3Yptw92Kbc」となります。

関連する問題