2016-07-24 3 views
-1

Я хочу сделать sth. как следующий код ... У кого-то есть идея? Спасибо :)Код доступа в QString с терминатором Unicode

QString x = QString("\ue001"); 

if(x.startsWith("\ue")) { 
    //... 
} 
+0

Для начала используется \ uue001 как текст или символ unicode e001? – deviantfan

+0

Это символ unicode e001 .... –

+0

Вы используете компилятор с поддержкой C++ 11? –

ответ

1

Чтобы получить 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 

, тогда проверка также выполнена.

+0

Помимо строковой конструкции, QString кодируется в UTF-16. Поэтому, чтобы проверить, соответствует ли первый код, содержащийся в строке, форме U + Exxx, достаточно, если вы проверите, действительно ли первый блок кода находится между 0xE000 и 0xEFFF (поскольку диапазон U + Exxx закодирован в UTF-16 в свой собственный value) ... – peppe

+0

Спасибо за ваши ответы, но мне нужно преобразовать значение «001» QString («\ ue001») в другой QString => QString («001») ... и я хочу преобразовать QString («001») в QString («\ ue001»). Мне нужно это для интерактивного IconFont Userinterfacedesigner ... Пользователь должен ввести: «\ ue001», и поэтому он может установить IconFont из материала Google в пользовательском интерфейсе, который написан с помощью Qt Quick. Спасибо :) –

0

У меня есть решение от когда-нибудь где-то в всемирной паутине:

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; 
} 

Строка должна быть начинаться с двойным обратным слешем.