Как получить правильный китайский язык при использовании rapidjson на MacOS разработать приложение QT? - PullRequest
0 голосов
/ 14 мая 2019

Я разработал кроссплатформенное приложение qt для MacOS и Windows, у меня есть файл с именем 'proj.json', он генерируется программой fastjson в моем приложении для Windows, а в Windows его формат кодирования - GB2312, теперь я использую rapidjson в моем приложении на Mac для анализа proj.json, в файле proj.json есть строка '. \ Templates \ 2D 贴纸 \ 2D 贴纸 .fuproj', в моем приложении qt на mac я использую этот код для получения строка '. \ Templates \ 2D 贴纸 \ 2D 贴纸 .fuproj'

string pjson = fullfile(folder, "/proj.json");
    if (isexist(pjson))
    {
        rapidjson::Document doc;
        bool isReadJsonSuccess;
        doc = loadJson(pjson,&isReadJsonSuccess);
        if (isReadJsonSuccess){
            rapidjson::Value &ps = doc["Projects"];
            for (int i = 0; i < ps.Size(); i++) {
                rapidjson::Value &item = ps[i];
                string str1 = item["path"].GetString();
                                cout << "str1----" << str1 << endl;


и выход из системы 'str1 ----. \ Templates \ 2D \ 314 \ 371 ֽ \ 2 D \ 314 \ 371 ֽ. Fuproj', я не использую формат кодирования строки '. \ Templates \ 2D \ 314 \ 371 ֽ \ 2 D \ 314 \ 371 ֽ. fuproj», и мое приложение qt на Mac в формате кодирования среды выполнения 'UTF-8', кажется, что GB2312 конвертирует в UTF-8. как показать строку GB2312 '. \ Templates \ 2D 贴纸 \ 2D 贴纸 .fuproj' прямо в приложении qt на макросах, большое спасибо!

1 Ответ

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

Как насчет преобразования его по следующему методу

#include <QTextCodec>

inline QString GBK2UTF8(const QString &inStr)
{
    QTextCodec *gbk = QTextCodec::codecForName("GB18030");
    QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");

    QString g2u = gbk->toUnicode(gbk->fromUnicode(inStr));            // gbk  convert utf8
    return g2u;
}

inline QString UTF82GBK(const QString &inStr)
{
    QTextCodec *gbk = QTextCodec::codecForName("GB18030");
    QTextCodec *utf8 = QTextCodec::codecForName("UTF-8");

    QString utf2gbk = gbk->toUnicode(inStr.toLocal8Bit());
    return utf2gbk;
}

// Convert stirng to QString
std::string str = "Hello world";
QString qstr = QString::fromStdString(str);

Я не проверял, но это может помочь.

...