C#解码俄文乱码失败,如何将ISO-8859-1乱码正确转为UTF-8俄文?
俄文乱码转码解决方案
根因说明
你遇到的乱码是典型的UTF-8编码俄语文本,被错误使用Windows-1252(西欧单字节编码)解码为字符串导致的,不需要做跨编码转换,只要还原解码流程即可。
正确代码实现
// .NET Core / .NET 5+ 版本需要先注册编码提供程序,否则调用GetEncoding会报错 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance); var garbledString = "Заполни профиль"; // 第一步:用错误解码时采用的Windows-1252编码,把乱码字符串转回原始字节数组 byte[] originalUtf8Bytes = Encoding.GetEncoding("Windows-1252").GetBytes(garbledString); // 第二步:用正确的UTF-8编码解码原始字节,得到正常俄文 string correctRussianText = Encoding.UTF8.GetString(originalUtf8Bytes);
运行后得到的正确结果为:Заполни профиль(俄语含义为"填写个人资料")
原代码错误点
- 编码逻辑方向完全颠倒,不需要调用
Encoding.Convert做跨编码转换,冗余操作破坏了原始字节序列 - 混淆了Windows-1252和UTF-8的作用场景,Windows-1252是用来把乱码还原为原始字节的编码,不是目标编码
内容的提问来源于stack exchange,提问作者d1plomat
相关产品推荐
相关产品推荐

