将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);
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
类文档