我注意到了.NET 3.5SP1中File.Copy()
的奇怪行为。我不知道这是一个错误还是一个功能。但我知道这让我发疯。我们在自定义构建步骤中使用File.Copy()
,并且它将字符编码拧紧。File.Copy和字符编码
当我通过UTF-8编码的文本文件复制ASCII编码文本文件时,目标文件仍然是UTF-8编码,但具有新文件的内容加上UTF-8的3个前缀字符。这对于ASCII字符很好,但对于ANSI代码页的其余字符(128-255)不正确。
下面是重现的代码。我首先将UTF-8文件复制到目的地,然后将ANSI文件复制到相同的目的地。注意第二个控制台输出的输出:Content of copy.txt : this is ASCII encoded:/Encoding: utf-8
File.WriteAllText("ANSI.txt", "this is ANSI encoded: é", Encoding.GetEncoding(0));
File.WriteAllText("UTF8.txt", "this is UTF8 encoded: é", Encoding.UTF8);
File.Copy("UTF8.txt", "copy.txt", true);
using (StreamReader reader = new StreamReader("copy.txt", true))
{
Console.WriteLine("Content of copy.txt : " + reader.ReadToEnd() + "/Encoding: " +
reader.CurrentEncoding.BodyName);
}
File.Copy("ANSI.txt", "copy.txt", true);
using (StreamReader reader = new StreamReader("copy.txt", true))
{
Console.WriteLine("Content of copy.txt : " + reader.ReadToEnd() + "/Encoding: " +
reader.CurrentEncoding.BodyName);
}
任何想法,为什么出现这种情况?我的代码中有错误吗?任何想法如何解决这个问题(我现在的想法是之前删除的文件,如果存在)
编辑:正确的ANSI/ASCII混乱
问题不在于StreamReader。我只用它来创建可以重现问题的一小段代码。 (我搞砸了,因为我在混淆ASCII和ANSI的同时玩弄它)。我首先在一个十六进制编辑器中注意到了它,并且据我了解,生成的文件不正确,因为它具有UTF-8字节顺序标记(开始时为3个字节),并且重音字符有错误的字符代码 – chris166 2009-06-16 09:20:42
有些奇怪。我无法再现它。所以有些东西过时了(我的十六进制编辑器,VS中的代码或其他)。无论如何,感谢您研究这个问题并花费这么多时间! – chris166 2009-06-16 09:26:56