我在客户网站上遇到一个问题,其中包含“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());
。 。 。给。 。 。
任何想法在这里发生了什么,我如何处理这个文件并保留原始文本?
答案 0 :(得分:8)
唯一的方法是以相同的编码读取文件,它已被编码。这意味着Windows-1252:
Encoding enc = Encoding.GetEncoding(1252);
string correctText = File.ReadAllText(@"C:\BadWord.txt", enc);
答案 1 :(得分:0)
在打开StreamWriter之前,您应该执行reader.Peek()
。这将从文件中读取第一个字符,以正确检测编码而不更改当前位置。