wxWidgets и преобразование в и из кодовых точек юникода - PullRequest
0 голосов
/ 28 марта 2012

Я хотел бы использовать \u escape-последовательности в тексте, но преобразование кажется непонятным.

Насколько я понимаю, \u использует запись \uXXXX, где X - шестнадцатеричная цифра и описывает кодовую точку в utf8? самолет? Но utf8 - это кодировка переменной длины, поэтому она не обязательно должна содержать 4 цифры?

Итак, как же можно преобразовать wxString[0] -> '\uXXXX' секвест? Я использую mb_str(wxConvUTF8) или как? Все эти вещи по конвертированию в Unicode мне сейчас кажутся очень запутанными.

А что делать с обратным преобразованием? Если я получу ввод с последовательностями '\ uXXXX', как правильно найти их в строке и преобразовать в символы Юникода для вывода?

1 Ответ

1 голос
/ 28 марта 2012

Итак, как происходит преобразование wxString [0] -> '\ uXXXX'

Вы можете сделать это в wxWidgets v2.9.x

wxString x = L"\x014C";
const char* xbuf = (const char*)x.wc_str();
wxString y = wxString::Format("%s = \\u%02X%02X",x,xbuf[1],xbuf[0]);
wxMessageBox(y,"Unicode test");

Который производит это:

enter image description here

Обратите внимание на порядок доступа к байтам в xbuf. Это не кроссплатформенность! Это зависит от того, как байты хранятся в слове на вашем компьютере. Вот почему UTF8 часто используется вместо UTF16.

...