Перевести литерал Unicode в Qt 5.3

В приложении Qt 5.3 у меня есть строковый литерал, содержащий не-ASCII символы (в частности, немецкие умлауты), которые нужно будет переводить на иностранные языки. Таким образом, у меня есть две проблемы: (1) я должен пометить этот литерал с помощью tr () и (2) мне нужно правильно отобразить строку на экране, для которой, как мне кажется, мне нужно использовать QString :: fromLatin1 () или некоторые другие такая функция.

Если я сделаю

QString s = tr("ä");

строка помечена для перевода, но не будет отображаться справа.

Если я сделаю

QString r = QString::fromLatin1("ä");

строка будет отображаться справа, но не будет помечена для перевода.

Как я могу объединить два в один? И да, мой исходный файл сохраняется в кодировке UTF8.

Я искал вверх и вниз по форумам, и ни один из подсказок не работает; главным образом потому, что большинство решений относятся к Qt 4.8 и были удалены или амортизированы для Qt 5.3. Спасибо за помощь!!

PS: я занимаюсь разработкой с использованием Visual Studio 2010 на Windows 8. Согласно VS2010 и Notepad ++ мои источники сохраняются в UTF8 с кодировкой BOM.

2

Решение

При использовании QString::fromLatin1("ä") вы получите правильный вывод, тогда ваши исходные файлы не имеют кодировки UTF-8.

Когда исходный файл

printf("%x\n", QString("ä").at(0).unicode());
printf("%x\n", QString::fromLatin1("ä").at(0).unicode());

имеет кодировку UTF-8, затем вывод

e4
c3

но когда Latin1 (ISO-8859-1), то

fffd
e4

e4 это Юникод код буквы ä (U + 00E4)

3

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

Читать документацию trUtf8 (устарел / устарел в Qt5).
Таким образом, вам не нужно использовать эту функцию, просто установите правильный кодек по умолчанию. Добавьте я эту строку:

QTextCodec::setCodecForTr("UTF-8");

Если вы предпочитаете не менять кодек по умолчанию, просто используйте trUtf8 вместо tr,

-1

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