#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;
?