读取文件时的C#编码

时间:2016-03-02 13:57:32

标签: c# .net character-encoding

我有一个包含字母ø的文件。当我用这段代码File.ReadLines(filePath)读取它时,我得到了一个问号,而不是它。

当我添加像File.ReadLines(filePath, Encoding.GetEncoding(1252))这样的编码时,我会得到ø字符。

但默认编码已设为1252,属性Encoding.Default.CodePage返回1252。

那么,为什么我必须在阅读时指定编码到1252,当默认值已设置为1252时?

还有一个问题,如果文件是Unicode,C#会识别其格式还是我必须指定Unicode编码?

1 个答案:

答案 0 :(得分:3)

原因是默认情况下,读取文本文件时使用的编码是UTF8。

Encoding.Default不是(尽管它的名字)读取文件时使用的默认编码!

在我看来,Encoding.Default的一个更好的名称应该是Encoding.UsingCurrentCodePage。 ;)

另请注意,您可以使用File.ReadLines(filePath, Encoding.GetEncoding(1252))而不是File.ReadLines(filePath, Encoding.Default)

如果您的代码试图读取在1252之外的不同代码页中创建的文件,那么您将这样做,并且该代码页是运行代码的系统的当前代码页。

您应该使用代码页的唯一原因是您正在阅读或编写旧文件。