读取文件时的 C# 编码
本文关键字:编码 文件 读取 | 更新日期: 2023-09-27 18:37:00
我有一个包含字母 ø
的文件。当我用这段代码从中读取它时File.ReadLines(filePath)
我得到了一个问号而不是它。
当我像这样添加编码时File.ReadLines(filePath, Encoding.GetEncoding(1252))
我得到了ø
字符。
但默认编码已设置为 1252
,属性Encoding.Default.CodePage
返回 1252。
那么,为什么我必须在读取时指定编码以1252
,而默认值已经设置为 1252
?
还有一个问题,如果文件是Unicode,C#会识别它的格式还是我必须指定Unicode编码?
原因是默认情况下,读取文本文件时使用的编码是 UTF8。
Encoding.Default
不是(尽管它的名字)读取文件时使用的默认编码!
在我看来,Encoding.Default
更好的名字应该是Encoding.UsingCurrentCodePage
。 ;)
另请注意,您可以使用File.ReadLines(filePath, Encoding.Default)
,而不是使用File.ReadLines(filePath, Encoding.GetEncoding(1252))
。
如果代码尝试读取在与 1252 不同的代码页中创建的文件,并且该代码页是运行代码的系统的当前代码页,则可以执行此操作。
您应该使用代码页的唯一原因是您正在读取或写入旧文件。