どのように私は可能System.Stringに拡張ASCIIに変換することができますか?
-
21-08-2019 - |
質問
例:「1/2」またはASCII 12月189私はこのケースでは、バイト[]は有効な値が含まれているテキストファイルからバイトを読んだとき189
Unicodeの置換文字にUnicodeの結果への変換65533です。
UnicodeEncoding.Unicode.GetString(B)
63またはASCIIの結果への変換 "?"
これが不可能な場合は、ASCIIEncoding.ASCII.GetString(B)
このデータを処理するための最良の方法は何ですか?私は()に置き換えなどの文字列関数を実行できるようにしたいと思います。
解決
バイト189は、ISO-8859-1で「1/2」(別名「ラテン1」)を表しているので、次は何をしたいかもしれないです。
var e = Encoding.GetEncoding("iso-8859-1");
var s = e.GetString(new byte[] { 189 });
あなたが何かを変換するためのエンコーダ/デコーダを使用する必要があるので、.NETのすべての文字列と文字は、UTF-16でエンコードされ、時にはこれは、(FileStreamをインスタンスに対して例えばUTF-8)デフォルト設定されているが、良い練習は常に指定することですます。
あなたはどのエンコーディングに関する情報をご提供するために(良い)暗黙的または明示的なメタデータのいくつかのフォームが必要になります。
他のヒント
これは、エンコーディングがまさに依存ます。
「ASCII 189」のようなものはありません - ASCIIは127に上がる最初の128個の値のためにASCIIを使用して8ビットのエンコーディング多くのエンコーディングがあります。
。は、<全角> のは、(特定のシステムのデフォルトエンコーディングである)Encoding.Default
をしたいが、それは確実に知ることは難しいことがあります。あなたのデータはどこから来たのか?
古いPC-8または拡張ASCII文字セットは周りでした。これは、ASCII拡張されました - 実際には1982年に、それは、EGAカードを使用すると、VRAMにして、他のフォントをロードすることができ、最大まで、一度PCの上で利用可能に設定ONLY文字だった。
。これはまた、ANSI端末のデフォルトの標準だった、と私は80年代と90年代初頭にまでダイヤルしたほぼすべてのBBSには、メニューやボックスを表示するために、この文字セットを使用しました。
ここではUnicodeテキストにして8ビットの拡張ASCIIをオンにするコードです。 GetEncodingで(「437」):コードのキービットを注意してください。これは、Unicodeの同等の8ビットのASCIIテキストを翻訳するには、コードページ437を使用します。
string ASCII8ToString(byte[] ASCIIData)
{
var e = Encoding.GetEncoding("437");
return e.GetString(ASCIIData);
}
System.String[]
はASCII > 127
で文字を格納することはできません
あなたは、このようなœ ¢ ½ ¾
ここのように任意の拡張ASCII文字で作業しようとしている場合は、そのバイナリと小数に変換する方法があります同等の