web-dev-qa-db-ja.com

C#を使用してtxtファイル(Unicodeおよびutf8)を読み取る

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

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

そして

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

しかし、どちらの場合でも、「ありがとう-???????」を受け取りました。どうしましたか?

Upd: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();
        }

結果:thanksÑпаÑибо

17
mtkachenko

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

string allText = File.ReadAllText(unicodeFileFullName, Encoding.UTF8);
Console.OutputEncoding = Encoding.UTF8;
Console.WriteLine(allText);
16
keyboardP

デフォルトのエンコーディングタイプを使用する

File.ReadAllText(unicodeFileFullName, Encoding.Default);

???? Chractersを修正します。

5
alireza amini

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 を参照してください。

3
Warren Rox