读取文件时的 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编码?

读取文件时的 C# 编码

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

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

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

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

如果代码尝试读取在与 1252 不同的代码页中创建的文件,并且该代码页是运行代码的系统的当前代码页,则可以执行此操作。

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