从StreamReader.ReadLine()得到的字符串的编码是什么

时间:2011-11-11 03:27:28

标签: c# unicode streamreader

首先,让我们看看代码:

//The encoding of utf8.txt is UTF-8
StreamReader reader = new StreamReader(@"C:\\utf8.txt", Encoding.UTF8, true);
while (reader.Peek() > 0)
{
    //What is the encoding of lineFromTxtFile?
    string lineFromTxtFile = reader.ReadLine();
}

正如乔尔在着名的article中所说:

  

如果您有字符串,内存,文件或电子邮件消息,您必须知道它所处的编码,或者您无法解释它或正确地将其显示给用户。“

所以我的问题就出现了:字符串 lineFromTxtFile 的编码是什么? UTF-8(因为它来自以UTF-8编码的文本文件)?或UTF-16(因为.NET中的字符串是“Unicode”(UTF-16))?

感谢。

3 个答案:

答案 0 :(得分:6)

所有.Net字符串变量都使用Encoding.Unicode UTF-16,little endian )进行编码。更好的是,因为你知道你的文本文件是utf-8并告诉你的streamreader在构造函数中的正确编码,所以任何特殊字符都将被正确处理。

答案 1 :(得分:2)

.NET strings是Unicode。编码不起作用,然后直到你需要使用它。例如,如果您将其写入文件,则将指定输出编码。但是由于.NET通过库调用来处理你对字符串所做的一切,所以它在内存中的表示方式并不重要。

答案 2 :(得分:1)

它将是Unicode,因为所有.NET字符串都是。真正的问题:为什么重要?