C / C ++:libcurl +扩展的ASCII字符=糟糕的Google Translation API结果

问题描述 投票:0回答:2

我正在尝试在我的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ß,则会发生同样的事情。

c++ c libcurl google-translation-api
2个回答
0
投票

你尝试过curl_easy_escape吗?当你有非ascii字符集时,首先逃避字符串可能是一个好主意。请注意,这并不关心字符编码(在您的情况下为utf8)。所以你需要首先使用一些标准方法转换编码like this for C++iconv for C / C ++。


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.