Сравнение международных строк

То, что я пытаюсь сделать, это сравнить 2 строки QStrings, которые имеют специальные символы (французский)

сначала я получил с сервера, как данные JSON, сохраненные в txtInfo

txtInfo = "Présenter";

Когда у меня такое состояние, это не сработает (не установит состояние.)

  if (txtInfo == "Présenter"){
m_appState = 8;
m_appStateString = AppStatesArray[m_appState];
}

else {
m_appState = -1;
m_appStateString = "UNKNOWN";
}

Чего мне не хватает? Что если я хотел бы сравнить не французский, а китайский?

большое спасибо

0

Решение

Начиная с Qt 5 QString operator== выполняет fromUtf8 преобразование в массив символов по сравнению с ним. Но если ваш исходный файл (.cpp) не использует utf8, вам нужно создать собственную QString.

В зависимости от кодировки вашего исходного файла (.cpp):

utf8:

QString compared = QString::fromUtf8("Présenter");
if (txtInfo == QString::fromUtf8("Présenter")){

локальный 8-битный:

QString compared = QString::fromLocal8Bit("Présenter");
if (txtInfo == QString::fromUtf8("Présenter")){

Для 100% правильности не забудьте нормализовать ваши строки:

txtInfo = txtInfo.normalized(QString::NormalizationForm_D);
QString compared = /* the correct form for you */;
if (txtInfo == compared.normalized(QString::NormalizationForm_D)){
3

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

Других решений пока нет …

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