c# - 将字符串从 ISO-8859-5 转换为 UTF8

标签 c# encoding utf-8 windows-mobile

我正在为 Windows Mobile 编写应用程序。我使用扫描,得到一个编码为 ISO-8859-5 的字符串。如何将字符串转换为 UTF8?

这是我的代码

var str_source = "³¿±2";
        Console.WriteLine(str_source);
        Encoding iso = Encoding.GetEncoding("iso-8859-5");
        Encoding utf8 = Encoding.UTF32;
        byte[] utfBytes = utf8.GetBytes(str_source);
        byte[] isoBytes = Encoding.Convert(utf8, iso, utfBytes);
        var str_result = iso.GetString(isoBytes, 0, isoBytes.Length);
        Console.WriteLine(str_result);

最佳答案

在处理编码问题时,您永远不应该使用字符串文字来开始您的测试代码。始终使用字节开头。

        Encoding iso = Encoding.GetEncoding("iso-8859-5");
        Encoding utf = Encoding.UTF8;

        var isoBytes = new byte[] { 228, 232 }; // фш
        // iso to utf8
        var utfBytes = Encoding.Convert(iso, utf, isoBytes);
        // utf8 to iso
        var isoBytes2 = Encoding.Convert(utf, iso, utfBytes);

        // get all strings (with the correct encoding)
        // all 3 strings will contain фш
        string s1 = iso.GetString(isoBytes);
        string s2 = utf.GetString(utfBytes);
        string s3 = iso.GetString(isoBytes2);

编辑:如果您确实想使用字符串文字来开始,那么您可以使用下面的代码将它们的编码 (Encoding.Unicode) 更改为预期的“传入文本”编码:

        string stringLiteral = "фш";
        Encoding.Convert(Encoding.Unicode, Encoding.GetEncoding("iso-8859-5"),
           Encoding.Unicode.GetBytes(stringLiteral)); // { 228, 232 }

关于c# - 将字符串从 ISO-8859-5 转换为 UTF8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27647755/

相关文章:

javascript - 用于查找和替换转义的 UTF-8 字符串的正确正则表达式

unicode - 在 Qt 中创建 UTF-8 文件

c# - 重启后 Windows 服务不会自动启动

string - 为什么 wcout << "";可以,但是 wcout << string();不是?

java - Text.getBytes() 返回意外结果

regex - 纠正由错误编码引起的乱码的最佳方法

c# - "System.Web.HttpContext cannot be serialized because it does not have a parameterless constructor."

c# - 为什么我可以使用简写 `[Authorize]` 而不是实际类的名称 `[AuthorizeAttribute]` ?

c# - 素数c#

c# UTF8 GetString from bytes array 不等于 php chr 函数