将十六进制UTF-8字节转换为十六进制代码点。

5
我该如何将Hex UTF-8字节-E0 A4 A4转换为十六进制代码点-0924?需要参考 http://www.ltg.ed.ac.uk/~richard/utf-8.cgi?input=e0+a4+a4&mode=bytes。我希望这样做是因为在C#中读取Unicode数据时,它将其作为单个字节序列,并显示3个字符而不是1个,但我需要3个字节序列(读取3个字节并显示单个字符)。我尝试了许多解决方案,但没有得到结果。如果我可以显示或存储3个字节序列UTF-8字符,则不需要转换。场景如下:
    string str=getivrresult();

在字符串中,每个字符都是由3个字节的UTF-8序列表示。

编辑:

             string str="त";
             //i want it as "त" in str.

    Character                                   त
    Character name                              DEVANAGARI LETTER TA
    Hex code point                              0924
    Decimal code point                          2340
    Hex UTF-8 bytes                             E0 A4 A4
    Octal UTF-8 bytes                           340 244 244
    UTF-8 bytes as Latin-1 characters bytes     à ¤ ¤  

谢谢您。


1
请展示一下你已经尝试过的内容。 - dtb
你的输入和输出意图非常不清晰...提供一个包含示例的输入输出将会很有帮助。 - Jon Skeet
@JonSkeet:我猜OP想要反转 string.Join(" ", Encoding.UTF8.GetBytes(string).Select(x => x.ToString("X2"))); - dtb
@dtb:可能是这样,但并不完全清楚。特别是,输入是字节数组还是字符串并不明显... - Jon Skeet
BitConverter.ToString(b).Replace("-", "") - Charles Okwuagwu
2个回答

6

使用 Encoding 类中的 GetString 方法:

byte[] data = { 0xE0, 0xA4, 0xA4 };
string str = Encoding.UTF8.GetString(data);

该字符串现在包含一个字符,其字符代码为0x924。


谢谢Guffa,我得到了答案,就像你说的一样。我正在发布它。 - Lalitya

0
        //utf-8 Single Byte Sequence input
        string str = "त";
        int i = 0;
        byte[] data=new byte[3];

        foreach (char c in str)
        {
            string tmpstr = String.Format("{0:x2}", (int)c);
            data[i] = Convert.ToByte(int.Parse(tmpstr, System.Globalization.NumberStyles.HexNumber));
            i++;
        }


        //utf-8 3-Byte Sequence Output now stp contains "त".
        string stp = Encoding.UTF8.GetString(data);

跳过 string.FormatConvert.ToByteint.Parse,直接使用 data[i] = c; 怎么样? - Ben Voigt

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接