我试图在我的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/

10-09 05:45