C/C++:libcurl + 扩展 ASCII 字符 = 错误 Google 翻译 API 结果
C/C++: libcurl + extended ASCII chars = bad Google Translation API result
我正在尝试在我的 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ß
改为 nu%DF
,同样的事情也会发生。
你试过为 C/C++ 做 curl_easy_escape ? When you have non-ascii char set it is probably a good idea to escape the string first. Please note this doesn't care about character encodings (in your case utf8). So you need to first convert the encoding using some of the standard ways like this for C++ Or iconv 吗?
我明白了,我需要将 ß 编码为 %C3%9F
。我正在使用 ß (%DF
) 的 ASCII 代码执行 "percent sign encoding",而我需要为其使用 UTF-8 代码。
我正在尝试在我的 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ß
改为 nu%DF
,同样的事情也会发生。
你试过为 C/C++ 做 curl_easy_escape ? When you have non-ascii char set it is probably a good idea to escape the string first. Please note this doesn't care about character encodings (in your case utf8). So you need to first convert the encoding using some of the standard ways like this for C++ Or iconv 吗?
我明白了,我需要将 ß 编码为 %C3%9F
。我正在使用 ß (%DF
) 的 ASCII 代码执行 "percent sign encoding",而我需要为其使用 UTF-8 代码。