4

「HabitaþÒo」のような単語を含む行が出力で壊れてしまうという顧客サイトの問題があります。テキストファイルを処理しています(選択した行を引き出して別のファイルに書き込んでいます)

診断のために、私は問題をその悪い言葉だけを含むファイルに要約しました。

元のファイルにはBOMが含まれていませんが、.netはそれをUTF-8として読み取ることを選択します。

読み書きすると、この「Habita��o」のようになります。

BadWord.txtファイルの16進ダンプは次のようになります

ここに画像の説明を入力してください

このコードでファイルをコピーする

using (var reader = new StreamReader(@"C:\BadWord.txt"))
using (var writer = new StreamWriter(@"C:\BadWordReadAndWritten.txt"))
    writer.WriteLine(reader.ReadLine());

。。。与える。。。

ここに画像の説明を入力してください

リーダーのエンコーディングを保持しても何も起こりません

using (var reader = new StreamReader(@"C:\BadWord.txt"))
using (var writer = new StreamWriter(@"C:\BadWordReadAndWritten_PreseveEncoding.txt", false, reader.CurrentEncoding))
    writer.WriteLine(reader.ReadLine());

。。。与える。。。 ここに画像の説明を入力してください

ここで何が起こっているのか、このファイルを処理して元のテキストを保持するにはどうすればよいですか?

4

2 に答える 2

8

これを行う唯一の方法は、ファイルがエンコードされているのと同じエンコードでファイルを読み取ることです。これは、Windows-1252 を意味します。

Encoding enc = Encoding.GetEncoding(1252);
string correctText = File.ReadAllText(@"C:\BadWord.txt", enc);
于 2013-01-08T11:40:43.877 に答える
0

reader.Peek()StreamWriter を開く前に実行する必要があります。これにより、ファイルから最初の文字が読み取られ、現在の位置を変更せずにエンコーディングが正しく検出されます。

于 2014-05-26T19:43:16.753 に答える