我应该使用哪种编码来阅读æ,Ø,å,ä,ö,ü等?
答案 0 :(得分:9)
您应该使用原始数据的编码。你从哪里获取数据,你是否有关于它所在的编码的信息?如果您尝试使用错误的编码来读取它,您将得到错误的答案:即使您的编码可以处理字符,它也会误解二进制数据。
如果你选择编码,那么UTF-8通常是一个不错的选择。如果你有很多远东角色,那么它在尺寸方面是不好的,但其他方面都不错。特别是,ASCII仍然以每个字符一个字节出现。
答案 1 :(得分:8)
此外,你可以把文化读成像çááá等奇怪的carachteres。
CultureInfo pt = CultureInfo.GetCultureInfo("pt-BR");
StreamReader fileReader = new StreamReader("C:\temp\test.txt",Encoding.GetEncoding(pt.TextInfo.ANSICodePage),true);
答案 2 :(得分:4)
您需要使用正确的编码,因为提到了所有其他答案。
问题是如何发现编码。这取决于您的文件来源:
<?xml>
处理指令来指定编码。如果没有,你应该假设它是UTF8。在任何情况下,您都应该能够通过使用UTF8并回退到UTF16来覆盖所有文件的大约90%。过去五年中,几乎所有程序或语言都支持Unicode。但是,如果您要从中国消耗大量文件,您可以先尝试使用UTF16,这对编码GB18030来说更为普遍。
答案 3 :(得分:3)
编码都归结为这样一个事实:如果你为一个字符使用8位,你只能处理256个不同的字符。看到英国和美国设置了这些惯例,256个标准ASCII字符大多是非重音的西方字符。
这就是UTF8和UTF16发挥作用的地方。 UTF8很像ASCII - 它对大多数西方字符使用一个字节。但是,有一些特殊字节表示字符超出正常的ASCII范围 - 紧跟在特殊字节后面的两个字节表示真实字符。
UTF16(也称为Unicode)取消了特殊指示符字节,每个字符只使用16位。众所周知,16位给你65536个不同的字符,这不足以涵盖所有世界上的书写字符,但它主要完成这项工作。
所以回答你的问题:如果你的大部分字符都是非重音的西方字符,UTF8将是你最紧凑的代表(在许多编辑器中最具可读性)。如果您的大部分字符都是非西方字符(例如中文),您可能想要使用Unicode(又名UTF16)。
祝你好运!答案 4 :(得分:1)
Encoding.UTF8或Encoding.Unicode。
StreamReader类在其构造函数中有一个bool参数,允许它自动检测编码。
答案 5 :(得分:1)
没有完全可靠的方法,但您可以使用一些启发式方法来猜测编码。
Rick Strahl has a handy article通过BOM检测编码。它有点过时了 - System.Text.Encoding现在有一个GetPreamble方法,StreamReader有一个重载,它将尝试为你检测编码。
答案 6 :(得分:0)
Unicode =&gt; UTF-8 / UTF-16? :)