【发布时间】:2020-10-15 22:03:01
【问题描述】:
我正在尝试使用在线翻译服务编写一个简单的免费翻译器(QT 小部件)。 这个想法是将标准获取请求发送给在线翻译,然后解析响应。 但回复不包含翻译文本!我猜这是因为该服务使用 AJAX。 在示例中,我使用的是谷歌翻译器,但我与其他翻译器(yandex、deepl)得到了类似的结果。 我知道有一种使用共享软件API的方法,但是由于该项目目前尚未商业化,我不想注册银行卡。 有没有类似浏览器的方式可以在没有 API 的情况下获取翻译并免费使用?
我搜索过任何信息,但令我惊讶的是,它现在已经过时且无关紧要(因为谷歌关闭了免费服务)。
还有一个问题。当我尝试将结果转换为 QString(QString s = reply->readAll().toString() 或 QString s = reply->readAll().toStdString().c_str())时,我得到了一个扭曲的 htlm 代码(文件开头有很多 NUL 字符)。我认为这是由于对转义序列的误解,但是如何正确转换结果?即使在当前版本中,文件开头也有一些垃圾(NUL NUL Уi)。
我使用的代码是:
void getTranslate() {
QNetworkAccessManager manager;
QUrl url("https://translate.google.com/#view=home&op=translate&sl=en&tl=ru&text=Hello%2C%20World%20!");
QNetworkRequest request(url);
QNetworkReply *reply = manager.get(request);
do {
QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
} while(!reply->isFinished());
QFile html("out.html");
if (html.open(QIODevice::ReadWrite)) {
QDataStream out(&html);
out << reply->readAll();
}
reply->close();
delete reply;
}
【问题讨论】:
标签: c++ qt google-translate translate get-request