5

F0 A4 AD A2 として UTF-8 で表示される漢字があります。この文字については、http: //en.wikipedia.org/wiki/UTF-8で説明されています。

U+24B62 F0 A4 AD A2

このコードをC#で実行すると...

byte[] data = { 0xF0, 0xA4, 0xAD, 0xA2 };
string abc = Encoding.UTF8.GetString(data);
Console.WriteLine("Test: description = {0}", abc);

... 出力をテキスト ファイルにリダイレクトし、UTF-8 エンコーディングを選択して notepad.exe で開きます。出力が得られると思いますが、2 つの疑問符 (??) が表示されます。

バイトシーケンスは正しいです。Perlで動作します:

print "\xF0\xA4\xAD\xA2";

出力では、私は得る

だから私の質問は:なぜ私は "??" を得るのですか? C#の "" の代わりに?

PS この文字には特別なことはありません: どの文字 (2、3、または 4 バイト長) でも同じ結果が得られました。

4

2 に答える 2

12

デフォルトでは、コンソールは Unicode 文字を表示できません。ASCII のみを表示します。Unicode の表示を有効にするには、次を使用します。

Console.OutputEncoding = System.Text.Encoding.Unicode

それに書き込む前に。

ただし、Windows コマンド ラインは Unicode 自体をサポートしていないため、ほとんどの OS では失敗します。

したがって、テスト目的では、出力をファイルに書き込む方がよいでしょう

于 2013-03-04T16:40:21.643 に答える
4

UTF8 を使用してファイルに書き込む必要があります。以下のコードは、その方法を示しています。結果のファイルをメモ帳で開くと、文字が正しく表示されます。

string c = "";
var bytes = Encoding.UTF8.GetBytes(c);
var cBack = Encoding.UTF8.GetString(bytes);
using (var writer = new StreamWriter(@"c:\temp\char.txt", false, Encoding.UTF8))
{
    writer.WriteLine(cBack);
}
于 2013-03-04T16:46:48.480 に答える