我试图在我的C / C ++程序中使用带有libcurl的Google翻译API,但是每当使用扩展ASCII进行翻译时,我都会得到不好的结果。例如,将“nuß”翻译成英语(德语单词为“ nut”)。注意,ß是扩展的ASCII字符(0xDF),您不需要Unicode即可编写它。
“nuß”→Chrome中的英语
当我在Chrome中打开此URL时,它成功转换为“ nut”:
https://translate.googleapis.com/translate_a/single?client=gtx&ie=UTF-8&oe=UTF-8&sl=de&tl=en&dt=t&q=nuß
[[["nut","nuß",null,null,2]],null,"de"
“nuß”→我的C / C ++程序中的英语
当我在C / C ++程序中使用相同的URL时,它错误地转换为“ nu?”。
[[["nu?","nu?",null,null,0]],null,"de"
这是我的程序:
#include <iostream>
#define CURL_STATICLIB
#include "curl/curl.h"
int main() {
CURL *curl = curl_easy_init();
if (curl) {
curl_easy_setopt(curl, CURLOPT_URL, "https://translate.googleapis.com/translate_a/single?client=gtx&ie=UTF-8&oe=UTF-8&sl=de&tl=en&dt=t&q=nuß");
curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
return 0;
}
如果将URL的末尾更改为
nu%DF
而不是nuß
,也会发生相同的情况。 最佳答案
您尝试做curl_easy_escape吗?当您设置了非ASCII字符集时,最好先将字符串转义。请注意,这与字符编码无关(在您的情况下为utf8)。因此,您需要首先使用C / C ++的某些标准方法like this for C++或iconv转换编码。
关于c++ - C/C++:libcurl +扩展的ASCII字符=错误的Google Translation API结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55106748/