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

Kei*_*arm 2 c# character-encoding windows-1252 visual-studio-2017

这让我发疯。我想读取许多使用 Windows-1252 编码的文本文件(位于我的项目目录之外),将它们编辑为字符串,然后写回这些文件,再次作为 Windows-1252。然而 Visual Studio 却不断生成 UTF-8 文件。

这是我的文件读取代码:

using (StreamReader sr = new StreamReader(fileName, Encoding.Default))
{
    String s = sr.ReadToEnd();
    return s;
}
Run Code Online (Sandbox Code Playgroud)

这是我的文件写入代码:

File.WriteAllText(fileName, joinedFileString, Encoding.Default);
Run Code Online (Sandbox Code Playgroud)

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

但它不断将文件转换为 UTF-8!:-(

Jon*_*ase 6

您将需要更明确地指定您正在使用的编码。Encoding.Default可能因系统而异,并且根据文档

默认编码甚至可以在一台计算机上更改。

由于您知道想要哪种编码,因此可以使用以下命令专门指定它Encoding.GetEncoding(1252)

在某些环境中,您可能需要注册可用编码的提供程序。您可以通过将System.Text.Encoding.CodePagesnuget 包添加到项目中并将其注册到来完成此操作Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);