我有一个包含字母ø
的文件。当我用这段代码File.ReadLines(filePath)
读取它时,我得到了一个问号,而不是它。
当我添加像File.ReadLines(filePath, Encoding.GetEncoding(1252))
这样的编码时,我会得到ø
字符。
但默认编码已设为1252
,属性Encoding.Default.CodePage
返回1252。
那么,为什么我必须在阅读时指定编码到1252
,当默认值已设置为1252
时?
还有一个问题,如果文件是Unicode,C#会识别其格式还是我必须指定Unicode编码?
答案 0 :(得分:3)
原因是默认情况下,读取文本文件时使用的编码是UTF8。
Encoding.Default
不是(尽管它的名字)读取文件时使用的默认编码!
在我看来,Encoding.Default
的一个更好的名称应该是Encoding.UsingCurrentCodePage
。 ;)
另请注意,您可以使用File.ReadLines(filePath, Encoding.GetEncoding(1252))
而不是File.ReadLines(filePath, Encoding.Default)
。
如果您的代码试图读取在1252之外的不同代码页中创建的文件,那么您将这样做,并且该代码页是运行代码的系统的当前代码页。
您应该使用代码页的唯一原因是您正在阅读或编写旧文件。