读取文件时的C#编码

Ale*_*ksa 1 .net c# character-encoding

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

当我像这样添加编码时,我File.ReadLines(filePath, Encoding.GetEncoding(1252))得到了这个ø角色。

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

那么为什么我必须1252在阅读时指定 Encoding ,而默认值已经设置为1252

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

Mat*_*son 5

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

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

在我看来,更好的名称Encoding.Default本来是Encoding.UsingCurrentCodePage。;)

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

如果您的代码尝试读取在不同于 1252 的代码页中创建的文件,并且该代码页是运行代码的系统的当前代码页,则您会这样做。

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