重写文本时未保留非英文字符

时间:2013-01-08 11:36:48

标签: c# .net text file-io character-encoding

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

对于诊断我已经将问题归结为一个只有那个坏词的文件。

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

当读取和写入时,这个词最终看起来像“Habita o”。

BadWord.txt文件的十六进制转储看起来像这样

enter image description here

使用此代码复制文件

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

。 。 。给。 。

enter image description here

保留读者编码也不做任何事情

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

。 。 。给。 。 。 enter image description here

任何想法在这里发生了什么,我如何处理这个文件并保留原始文本?

2 个答案:

答案 0 :(得分:8)

唯一的方法是以相同的编码读取文件,它已被编码。这意味着Windows-1252:

Encoding enc = Encoding.GetEncoding(1252);
string correctText = File.ReadAllText(@"C:\BadWord.txt", enc);

答案 1 :(得分:0)

在打开StreamWriter之前,您应该执行reader.Peek()。这将从文件中读取第一个字符,以正确检测编码而不更改当前位置。

相关问题