从 QNetworkReply 读取后 Qt5 没有抛光字符
Qt5 no polish characters after reading from QNetworkReply
我需要从这个 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();
}
我需要从这个 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();
}