приложение qt показывает китайский язык в грязном коде на окнах при использовании формата кодировки UTF-8 - PullRequest
0 голосов
/ 13 мая 2019

Я разработал простое приложение qt для Windows для проверки китайского формата кодировки UTF-8 qt:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
    QString strMessage = QString::fromLocal8Bit("我是UTF8编码的文件:");
    qDebug() << strMessage;
    return a.exec();
}

и мой формат кодировки файла main.cpp - UTF-8 без спецификации, но когда я запускаю приложение в Windows, строка печати приложения выглядит как "鎴 戞 槸 UTF8 缂 栫 爜 鐨 勬 枃 浠 讹 讹 細" это "是 是 UTF8 编码 的 文件 :" "во время выполнения, и строка" shows 是 UTF8 编码 的 文件 : "показывает правильную строку" 我 是 UTF8 编码 的 文件 : '' когда приложение работает на макросах, я не знаю почему? как сделать так, чтобы строка "我 是 UTF8 编码 的 文件 :" отображалась прямо на платформе Windows, спасибо большое!

1 Ответ

1 голос
/ 13 мая 2019

В Windows печать UTF-8 на консоль не выполняется автоматически.Сначала необходимо выполнить эту команду в консоли, чтобы перейти на кодовую страницу 65001 (которая является кодовой страницей UTF-8 Windows):

chcp 65001

Вам также необходимо установить шрифт, который предлагает китайские символы.В Windows 10 это шрифт «NSimSun».Тем не менее, консоль Windows имеет удобную функцию, которая автоматически переключает шрифт, если вы установите китайскую кодовую страницу (например, 936).Таким образом, вы можете программно запускать эти команды, используя стандартную библиотеку system().Хотя команда chcp производит вывод.Чтобы скрыть это, перенаправьте вывод в nul.

#include <cstdlib>

// ...

int main(int argc, char *argv[])
{
#ifdef Q_OS_WIN
    // Temporary codepage change so we get an automatic font change.
    system("chcp 936 > nul");
    // Change to UTF-8.
    system("chcp 65001 > nul");
#endif

    QApplication a(argc, argv);
    QTextCodec::setCodecForLocale(QTextCodec::codecForName("UTF-8"));
    QString strMessage = QString::fromUtf8("我是UTF8编码的文件:");
    qDebug() << strMessage;
    return a.exec();
}

(В качестве примечания следует использовать QString::fromUtf8(), поскольку вы знаете, что текст в UTF-8.)

...