UTF8 строка в шестнадцатеричное значение

Мне нужен способ конвертировать символы в шестнадцатеричные значения в виде строк.

Я пробовал несколько способов, но все они просто игнорировали символы UTF8.

Например:

Взять характер:

Ş

Если он преобразован правильно, его шестнадцатеричное значение 0x15E но этот код просто возвращает меня 0x3F который просто персонаж ?,

wchar_t mychar = 'Ş';
cout << hex << setw(2) << setfill('0')
<< static_cast<unsigned int>(mychar);

Я нашел функцию JavaScript, которая именно то, что мне нужно, но не смог преобразовать ее в C ++ Вот

Спасибо

0

Решение

Проблема в том, что вы назначаете char буквально wchar_t mychar, Поскольку char имеет длину только один байт, он не может хранить символ Ş, Вы должны префикс литерала с L, как это:

wchar_t mychar = L'Ş';

Очень хорошая статья о Unicode, кодировках и т. Д. Абсолютный минимум Каждый разработчик программного обеспечения Абсолютно, положительно должен знать о Unicode и наборах символов (никаких оправданий!) Джоэл Спольски.

1

Другие решения

Даже если вы добавите к ним префикс L, тип wchar_t не очень хорошо обрабатывает международные наборы символов.

Попробуй это:

char16_t mychar16 {u'Ş'}; // Initialized with UTF-16 code
char32_t mychar32 {U'Ş'}; // Initialized with UTF-32 code

cout << showbase << hex << setw(12) << setfill('0')
<< std::setiosflags(ios::left | ios::hex)
<< static_cast<unsigned int>(mychar16) << endl;

Результат:

0x15e0000000

Кодировка символов, которая применяется с типом wchar_t определяется реализацией, поэтому она может варьироваться от одного компилятора к другому.
Типы char16_t и char32_t лучше подходят для обработки символов Юникода.

0

По вопросам рекламы [email protected]