1

如何在 c# 中将 cp1252 字符串转换为 utf-8 字符串?我试过这段代码,但它不起作用:

Encoding wind1252 = Encoding.GetEncoding(1252);
Encoding utf8 = Encoding.GetEncoding(1251);
byte[] wind1252Bytes = ReadFile(myString1252);
byte[] utf8Bytes = Encoding.Convert(wind1252, utf8, wind1252Bytes);
string myStringUtf8 = Encoding.UTF8.GetString(utf8Bytes);
4

1 回答 1

2
var myGoodString = System.IO.File.ReadAllText(
    @"C:\path\to\file.txt",
    Encoding.GetEncoding("Windows-1252")
    );

内存中的 .NET/ CLR string不能是 UTF-8。如果您愿意,它只是 Unicode 或 UTF-16。

上面的代码将正确地将 CP1252 中的文本文件读入 .NET string

如果你坚持要通过 a byte[] wind1252Bytes,那很简单:

var myGoodString = Encoding.GetEncoding("Windows-1252").GetString(wind1252Bytes);

自从编写了这个答案以来,已经出现了新版本的框架 .NET,默认情况下它不能识别所有旧的(旧的)特定于 Windows 的代码页。如果Encoding.GetEncoding("Windows-1252")您的运行时版本引发异常,请尝试注册其他提供程序

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

(可能需要额外的程序集引用System.Text.Encoding.CodePages.dll)在使用之前Encoding.GetEncoding("Windows-1252")

请参阅CodePagesEncodingProvider类文档

于 2015-10-13T15:13:02.797 回答