В приложении 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.
При использовании 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)
Читать документацию trUtf8 (устарел / устарел в Qt5).
Таким образом, вам не нужно использовать эту функцию, просто установите правильный кодек по умолчанию. Добавьте я эту строку:
QTextCodec::setCodecForTr("UTF-8");
Если вы предпочитаете не менять кодек по умолчанию, просто используйте trUtf8
вместо tr
,