例: "½"またはASCII DEC189。テキストファイルからバイトを読み取ると、byte []には有効な値(この場合は189)が含まれています。
Unicodeに変換すると、Unicode置換文字65533になります。
UnicodeEncoding.Unicode.GetString(b);
ASCIIに変換すると、63または "?"になります。
ASCIIEncoding.ASCII.GetString(b);
これが不可能な場合、このデータを処理するための最良の方法は何ですか? Replace()のような文字列関数を実行できるようにしたいと思います。
バイト189は、iso-8859-1(別名「Latin-1」)の「½」を表すため、次のようになります。
var e = Encoding.GetEncoding("iso-8859-1");
var s = e.GetString(new byte[] { 189 });
.NETのすべての文字列と文字はUTF-16でエンコードされているため、エンコーダー/デコーダーを使用して他のものを変換する必要があります。デフォルトの場合もあります(FileStreamインスタンスのUTF-8など)が、常に指定することをお勧めします。
どのエンコーディングに関する情報を提供するには、何らかの形式の暗黙的または(より良い)明示的なメタデータが必要になります。
古いPC-8または拡張ASCII文字セットは、IBMとMicrosoftがコードページのアイデアをPCの世界に導入する前から存在していました。これは、拡張ASCII-実際、EGAカードで他のフォントをVRAMにロードできるようになるまでは、当時のPCで使用できる文字セットはこれだけでした。
これはANSI端末のデフォルトの標準でもあり、80年代から90年代初頭にダイヤルアップしたほぼすべてのBBSは、メニューとボックスの表示にこの文字セットを使用していました。
8ビット拡張ASCIIをUnicodeテキストに変換するコードは次のとおりです。コードの重要なビットであるGetEncoding( "437")に注意してください。コードページ437を使用して8ビットを変換しました。 ASCII同等のUnicodeのテキスト。
string ASCII8ToString(byte[] ASCIIData)
{
var e = Encoding.GetEncoding("437");
return e.GetString(ASCIIData);
}
それは正確にエンコーディングが何であるかに依存します。
「ASCII189」のようなものはありません-ASCIIは127までしか上がりません。最初にASCIIを使用する8ビットエンコーディングは、多くのエンコーディングがあります128の値。
あなたかもしれません欲しいEncoding.Default
(これは特定のシステムのデフォルトのエンコーディングです)が、確実に知るのは難しいです。あなたのデータはどこから来たのですか?
System.String[]
は、拡張されたASCII ASCII > 127
here などの文字を処理しようとしている場合、œ ¢ ½ ¾
で文字を格納できません。それを2進数と10進数に相当するものに変換する方法です