从QNetworkReply读取后Qt5没有波兰语字符

问题描述

我需要从该URL https://www.nbp.pl/kursy/xml/lasta.xml获取数据。问题是response包含损坏的波兰语字符(?????而不是śćąęó)。

我的控制台和GUI完全能够显示波兰语字符,并且只有这一个content字符串被破坏了。

我不知道该怎么办。我在Linux上使用CLion。

#include "DataDownloader.h"
#include <QtWidgets/QMessageBox>

std::string DataDownloader::downloadData() const
{
    QNetworkAccessManager manager;
    QNetworkReply *response = manager.get(qnetworkrequest(QUrl(this->url)));
    QEventLoop event;
    connect(response,SIGNAL(finished()),&event,SLOT(quit()));
    event.exec();

    std::string content = QString(response->readAll()).toStdString();

    return content;
}

编辑: 实际上,其他包含波兰语标志的网站也可以正常工作。但是,我仍然必须使其与上面提供的内容一起使用

编辑2: 好像此xml是在ISO-8859-2中编码的。这可以解释问题,但我仍然不知道如何处理。

解决方法

这有效。

std::string DataDownloader::downloadData() const
{
    QNetworkAccessManager manager;
    QNetworkReply *response = manager.get(QNetworkRequest(QUrl(this->url)));
    QEventLoop event;
    connect(response,SIGNAL(finished()),&event,SLOT(quit()));
    event.exec();

    QTextCodec* codec = QTextCodec::codecForName("ISO-8859-2");
    QTextDecoder decoder{codec};

    return decoder.toUnicode(response->readAll()).toStdString();
}