0

我正在尝试在我的 C/C++ 程序中使用带有 libcurl 的 Google Translation 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ß.

4

2 回答 2

0

您是否尝试过 curl_easy_escape?当您设置了非 ascii 字符时,首先转义字符串可能是个好主意。请注意,这不关心字符编码(在您的情况下为 utf8)。因此,您需要首先使用一些标准方法转换编码,例如 C++iconv用于 C/C++。

于 2019-03-11T17:28:51.367 回答
0

我想通了,我需要将 ß 编码为%C3%9F. 我正在使用 ß ( ) 的 ASCII 代码进行“百分号编码”,%DF而我需要使用 UTF-8 代码。

于 2019-03-11T23:24:19.337 回答