преобразование шестнадцатеричных байт UTF-8 в шестнадцатеричную кодовую точку

#c# #unicode #utf-8 #hex

#c# #юникод #utf-8 #шестнадцатеричный

Вопрос:

как я могу преобразовать
шестнадцатеричный UTF-8 байт -E0 A4 A4 в шестнадцатеричную кодовую точку — 0924

ссылка: http://www.ltg.ed.ac.uk /~ричард/utf-8.cgi?ввод= e0 a4 a4 и режим= байты

Мне это нужно, потому что, когда я читаю данные Unicode в c #, они принимают их как однобайтовую последовательность и отображают 3 символа вместо 1, но мне нужна 3-байтовая последовательность (считывать 3 байта и отображать один символ), я перепробовал много решений, но результата не получил.

Если я могу отобразить или сохранить 3-байтовую последовательность символов utf-8, тогда мне не нужно преобразование.

senario выглядит так:

     string str=getivrresult();
  

в str у меня есть слово с каждым символом в виде 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. Пожалуйста, покажите нам, что вы уже пробовали.

2. Действительно неясно, что вы вводите и какой вывод вы хотите… пример, показывающий оба, был бы полезен.

3. @JonSkeet: я предполагаю, что OP хочет отменить string.Join(" ", Encoding.UTF8.GetBytes(string).Select(x => x.ToString("X2")));

4. @dtb: Возможно, но это не совсем понятно. В частности, не очевидно, является ли ввод массивом байтов или строкой…

5. BitConverter. toString(b).Заменить(«-«, «»)

Ответ №1:

Используйте GetString methdod в Encoding классе:

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

Теперь строка содержит один символ с кодом символа 0x924.

Комментарии:

1. Спасибо, Гуффа, я получил ответ, все точно так, как ты сказал. Я публикую это.

Ответ №2:

         //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);
  

Комментарии:

1. кляп ………… как насчет того , чтобы пропустить string.Format и Convert.ToByte , и int.Parse , и просто сказать data[i] = c; ?