如何读取包含特殊字符的ANSI编码文件(How to read an ANSI encoded fi

2019-08-06 19:04发布

我正在写一个TFS签入策略,用来检查是否包含我们的文件头我们的源文件。

我的问题是,我们的文件头中包含特殊字符“©”,不幸的是我们的一些源文件在ANSI编码。 所以,如果我在策略中阅读这些文件,该字符串看起来像“2009年版权”。

string content = File.ReadAllText(pendingChange.LocalItem);

我累了要改变字符串的编码,但它并不能帮助。 所以,我怎么能读取这些文件,我得到正确的字符串“©2009”?

感谢帮助!

问候ENY

Answer 1:

使用Encoding.Default

string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);

你应该知道,但是,读取使用系统默认编码它 - 这可能不是相同文件的编码。 有没有所谓的ANSI单一的编码,但通常当人们谈论“的ANSI编码”,他们的意思是Windows代码页1252或任何其框恰巧使用。

您的代码将更加强劲,如果你能找到所使用的精确编码。



Answer 2:

如果你打算有这样的政策,您也将有团队一致标准编码这似乎是明智的。 说实话,我不明白为什么任何一支球队会用比“的Unicode(UTF-8具有签名) - 代码页65001”之外的其他编码(也许除了ASPX页面有显著非拉丁静态内容但即使如此,我可以”吨看到它怎么会是一个大问题,使用UTF-8)。

假设你仍然要允许混合编码,那么你接下来需要一种方法来确定哪些编码文件是保存在让你知道要传递给它的编码ReadAllText 。 它不容易从然而使用该文件确定这Encoding.Default很可能工作正常。 由于其很可能是因为刚2编码处理,在VS(UTF-8的签名),并通过你的机器(可能的Windows-1252)采用常见的ANSI编码。

因此,使用

 string content = File.ReadAllText(pendingChange.LocalItem, Encoding.Default);

将工作。 (正如我所看到乔恩已经公布)。 这样做是因为当UTF-8 BOM(这是VS是指通过“签名”项)为存在于所提供的编码参数被忽略的文件和UTF-8的开始,则还是使用。 因此,该文件是使用UTF-8,你得到正确的结果,并在使用ANSI你最有可能也得到正确的结果保存。

顺便说一句,如果你正在处理的文件头不会ReadAllLines使事情变得更容易?



文章来源: How to read an ANSI encoded file containing special characters
标签: c# encoding ansi