19

「ありがとう - спасибо」という同じ内容の 2 つの txt ファイル (Windows メモ帳) を作成し、それらを utf8 および unicode で保存しました。メモ帳では、うまく見えます。次に、.Net を使用してそれらを読み取ろうとしました。

...File.ReadAllText(utf8FileFullName, Encoding.UTF8);

...File.ReadAllText(unicodeFileFullName, Encoding.Unicode);

しかし、どちらの場合も、「ありがとう - ???????」というメッセージが表示されました。どうしたの?

更新: utf8 のコード

static void Main(string[] args)
        {
            var encoding = Encoding.UTF8;
            var file = new FileInfo(@"D:\encodes\enc.txt");
            Console.OutputEncoding = encoding;
            var content = File.ReadAllText(file.FullName, encoding);
            Console.WriteLine("encoding: " + encoding);
            Console.WriteLine("content: " + content);
            Console.ReadLine();
        }

結果: ありがとう ÑпаÑибо

4

3 に答える 3

17

UTF8文字をサポートするように編集されました。コンソールまたはエンコードが設定されていない場所に出力しているようです。その場合は、エンコーディングを設定する必要があります。コンソールの場合、これを行うことができます

string allText = File.ReadAllText(unicodeFileFullName, Encoding.UTF8);
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine(allText);
于 2013-09-18T11:59:07.723 に答える
3

Unicode または UTF-8 でエンコードされたマルチバイト文字をコンソールに出力する場合は、対応するグリフを表示するために、コンソールにマルチバイト文字をサポートするフォント セットがあることを確認するだけでなく、エンコードを設定する必要があります。既存のコードを使用すると、MessageBox.Show(content) または Windows または Web フォームの表示が正しく表示されます。

コンソール ウィンドウ内でフォントを設定する方法については、http://msdn.microsoft.com/en-us/library/system.console.aspx を参照してください。

" Unicode 文字をサポートするには、エンコーダーが特定の Unicode 文字を認識する必要があり、その文字をレンダリングするために必要なグリフを持つフォントも必要です。Unicode 文字をコンソールに正常に表示するには、コンソール フォントを非ラスターに設定する必要があります。または、Consolas や Lucida Console などの TrueType フォント。」

補足として、FileStream クラスを使用してファイルの最初の 3 バイトを読み取り、バイト オーダー マーク インジケーターを探して、ファイルの読み取り時にエンコードを自動的に設定することができます。たとえば、byte[0] == 0xEF && byte[1] == 0xBB && byte[2] == 0xBF の場合、UTF-8 でエンコードされたファイルになります。詳細については、 http://en.wikipedia.org/wiki/Byte_order_markを参照してください。

于 2013-09-18T14:19:02.557 に答える