4

我在客户网站上遇到了一个问题,其中包含“HabitaþÒo”之类的单词的行在输出时被破坏了。我正在处理一个文本文件(拉出选定的行并将它们写入另一个文件)

为了诊断,我把问题归结为一个只有那个坏词的文件。

原始文件不包含 BOM,但 .net 选择将其读取为 UTF-8。

在阅读和书写时,这个词最终看起来像这样“Habita��o”。

BadWord.txt 文件的十六进制转储如下所示

在此处输入图像描述

使用此代码复制文件

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 回答