将cp1252字符串编码为c#中的utf-8字符串

本文关键字:字符串 中的 utf-8 编码 cp1252 | 更新日期: 2023-09-27 18:17:24

如何将cp1252字符串转换为c#中的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);

将cp1252字符串编码为c#中的utf-8字符串

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中。

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

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

自从这个答案被写出来之后,新版本的。net框架出现了,默认情况下不能识别所有旧的(遗留的)windows特定的代码页。如果Encoding.GetEncoding("Windows-1252")在运行时版本中抛出异常,请尝试使用

注册其他提供程序。
Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
在使用Encoding.GetEncoding("Windows-1252")之前,

(可能需要额外的System.Text.Encoding.CodePages.dll汇编引用)

参见CodePagesEncodingProvider类文档