Я хочу сделать sth. как следующий код ... У кого-то есть идея? Спасибо :)Код доступа в QString с терминатором Unicode
QString x = QString("\ue001");
if(x.startsWith("\ue")) {
//...
}
Я хочу сделать sth. как следующий код ... У кого-то есть идея? Спасибо :)Код доступа в QString с терминатором Unicode
QString x = QString("\ue001");
if(x.startsWith("\ue")) {
//...
}
Чтобы получить UTF8, вам нужно заменить
QString x = QString("\ue001");
с
QString x = QString(u8"\ue001");
первым.
О проверке, начинается ли первый календарный цикл с шестнадцатеричным. E: A элемента коды со значением
\ue???
(с любой шестигранной цифрой для каждого из них?) Имеет следующие бинарное представление в UTF8 (с 1 или 0 для каждого из них?):
11101110 10?????? 10??????
Предполагая, что байты действительны UTF8, первый 1110 указывает, что следующие два байта начинаются с 10, поэтому нет необходимости проверять это.
Итак, для самого простого случая достаточно проверить, является ли первый байт (если строка не пустой и т. Д.) Равна 0b11101110
, то есть 0xee
.
Непростой случай, UTF8, несмотря на фиксированный порядок байтов, может иметь спецификацию. Если строка имеет не менее 4 байтов, а первые 4 байта -
0xef 0xbb 0xbf 0xee
, тогда проверка также выполнена.
Помимо строковой конструкции, QString кодируется в UTF-16. Поэтому, чтобы проверить, соответствует ли первый код, содержащийся в строке, форме U + Exxx, достаточно, если вы проверите, действительно ли первый блок кода находится между 0xE000 и 0xEFFF (поскольку диапазон U + Exxx закодирован в UTF-16 в свой собственный value) ... – peppe
Спасибо за ваши ответы, но мне нужно преобразовать значение «001» QString («\ ue001») в другой QString => QString («001») ... и я хочу преобразовать QString («001») в QString («\ ue001»). Мне нужно это для интерактивного IconFont Userinterfacedesigner ... Пользователь должен ввести: «\ ue001», и поэтому он может установить IconFont из материала Google в пользовательском интерфейсе, который написан с помощью Qt Quick. Спасибо :) –
У меня есть решение от когда-нибудь где-то в всемирной паутине:
QString SomeClass::convertStringToUnicode(QString stringCode)
{
int idx = -1;
while((idx = stringCode.indexOf("\\u")) != -1) {
int hex = stringCode.mid(idx + 2, 4).toInt(0, 16);
stringCode.replace(idx, 6, QChar(hex));
}
return stringCode;
}
Строка должна быть начинаться с двойным обратным слешем.
Для начала используется \ uue001 как текст или символ unicode e001? – deviantfan
Это символ unicode e001 .... –
Вы используете компилятор с поддержкой C++ 11? –