c++ - C/C++ : libcurl + extended ASCII chars = bad Google Translation API result

标签 c++ c libcurl google-translation-api

我尝试在我的 C/C++ 程序中将 Google Translation API 与 libcurl 结合使用,但每当我使用扩展 ASCII 进行翻译时,都会得到不好的结果。例如,将“nuß”翻译为英语(德语中“nut”的意思)。请注意,ß 是扩展 ASCII 字符 (0xDF),您不需要 Unicode 来编写它。

“nuß”→ Chrome 中的英语

当我在 Chrome 中打开此网址时,它成功转换为“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)。所以你需要先使用一些标准方式like this for C++来转换编码或iconv对于 C/C++。

关于c++ - C/C++ : libcurl + extended ASCII chars = bad Google Translation API result,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55106748/

相关文章:

c++ - chrome 原生消息 : can a native host executable start with arguments?

c++ - 什么时候显式调用 C++ 析构函数?

c++ - 在 Qt Creator 中缓慢构建 Symbian Qt 项目。耗时20多分钟

c - 管道实现

c++ - 实现信号量时混淆核心转储

c++ - Libcurl 显示日志消息,即使 CURLOPT_VERBOSE 未激活

c++ - 类错误 : argument of type 'DWORD (windows_thread::)(void*)' does not match 'DWORD (*)(void*)' ? 中的 CreateThread

c++ - 如何在 linux 中分析 pthread 互斥锁?

c - 如何附加到从 libcurl 下载的文件?

php - 从 php curl https 请求中删除 SCSV Cipher Suite