Qt(C++)で日本語のJSONが読めない

投稿者: Anonymous

Jsonファイルをリードする関数を作っているのですが
同じファイルをLinuxとWindowsでリードしたところ、
Windows側はJsonファイル内に日本語があるとリードできませんでした
全て英数字のJsonファイルならLinuxでもWindowsでも問題なくリードできるのですが
QtのWindows版は日本語込みのJsonはリードする方法は無いでしょうか
以下のソースなのですが・・・

    //QJson::Parser
    QFile loadfile(_filename);
    if(loadfile.open(QFile::ReadOnly) == false){
        _errstring = loadfile.errorString();
        return false;
    }
    //ファイルオープン成功
    QTextStream in(&loadfile);
    QJsonDocument   jDoc = QJsonDocument::fromJson(in.readAll().toUtf8());  //●jDocに日本語があるとデータが入ってこない

Windows側はMinGW64bitを使用しています

解決

JSONファイルであれば、QTextStreamを介さずに、直接QFileから読み出してもよいと思います。

    //QJson::Parser
    QFile loadfile(_filename);
    if(loadfile.open(QFile::ReadOnly) == false){
        _errstring = loadfile.errorString();
        return false;
    }
    //ファイルオープン成功
    QJsonDocument   jDoc = QJsonDocument::fromJson(loadfile.readAll());

この場合、loadfile.readAll()QByteArrayの型でファイルデータが返ってくるので、
QJSonDocument::fromJson(const QByteArray &json, QJsonParseError *error = Q_NULLPTR)
のメソッドで処理できると思います。

readAll()メソッドは、QFileの継承元のQIODeviceクラスのメソッドです。(参考: QIODevice)

回答者: Anonymous

Leave a Reply

Your email address will not be published. Required fields are marked *