无法以 Windows-1252 编码写入文件,改用 UTF-8

Cannot write files in Windows-1252 encoding, get UTF-8 instead

这让我发疯。我想读取一些文本文件(位于我的项目目录之外),用 Windows-1252 编码,将它们编辑为字符串,然后写回这些文件,再次作为 Windows-1252。然而 Visual Studio 一直在大量生产 UTF-8 文件。

这是我的文件读取代码:

using (StreamReader sr = new StreamReader(fileName, Encoding.Default))
{
    String s = sr.ReadToEnd();
    return s;
}

这是我的文件编写代码:

File.WriteAllText(fileName, joinedFileString, Encoding.Default);

在这两者之间,我执行了各种编辑,包括添加、删除和 grepping 换行符,但我认为这些将通过在 File.WriteAllText 中指定编码以正确的编码来解决。请注意,我在 Visual Studio 的高级保存选项中将默认编码更改为 1252。因此 Encoding.Default 应该指的是正确的编码。

但它一直将文件转换为 UTF-8! :-(

您需要更明确地指定您使用的编码。 Encoding.Default 可能因系统而异,according to the documentation

the default encoding can even change on a single computer.

既然你知道你想要哪种编码,你可以用Encoding.GetEncoding(1252)

具体指定它

在某些环境中,您可能需要为可用编码注册提供程序。您可以通过将 System.Text.Encoding.CodePages nuget 包添加到您的项目并使用 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

注册它来完成此操作