翻译演示翻译中文失败,可能是编码失败
Translate demo failed to translate Chinese, maybe the encode failure?
最近,我实现了一个在线翻译演示,是的,当一个尝试将一个英文单词翻译成中文时,它运行良好,但不幸的是,它未能将一个中文单词翻译成英文。
我想这个问题可能是中文的编码引起的,我尝试打印网址,并将它们复制到IE,IE返回的结果是正确的。
代码如下:
/*
Filename: translate.cc
Author: BerlinSun
*/
#include <iostream>
#include "curl/curl.h"
#include "json/json.h"
using namespace std;
void usage()
{
cout << "Usage: translate word_you_want_to_translate" << endl;
}
int writer(char *data, size_t size, size_t nmemb, string *writerData)
{
if (writerData == NULL)
return 0;
int len = size*nmemb;
writerData->append(data, len);
return len;
}
int main(int argc, char *argv[])
{
if(argc < 2)
{
usage();
exit(0);
}
string buffer;
string translate_url = "http://fanyi.youdao.com/openapi.do?keyfrom=xxxxxx&key=xxxxxx&type=data&doctype=json&version=1.1&q=";
translate_url += argv[1];
CURL * curl;
CURLcode res;
curl = curl_easy_init();
if (curl)
{
curl_easy_setopt(curl, CURLOPT_URL, translate_url.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, writer);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &buffer);
res = curl_easy_perform(curl);
curl_easy_cleanup(curl);
}
if (buffer.empty())
{
cout << "The server return NULL!" << endl;
exit(0);
}
Json::Value root;
Json::Reader reader;
bool parsingSuccessful = reader.parse(buffer, root);
if (!parsingSuccessful)
{
cout << "Failed to parse the data!" << endl;
exit(0);
}
const Json::Value basic = root["basic"];
const Json::Value phonetic = basic["phonetic"];
const Json::Value explains = basic["explains"];
cout << "Provided by Youdao dictionary!" << endl;
cout << "-----------------------------" << endl;
cout << argv[1] << "t英[" << phonetic.asString() << "]" << endl;
for(int i = 0; i < explains.size(); ++i)
cout << explains[i].asString() << endl;
return 0;
}
这个问题已经自己解决了,我检查了 libcurl 的手稿,发现这是一个可以用来编码 url 的函数:
char *curl_easy_escape( CURL * curl , char * url , int length );
我修改了我的源代码来判断 argv[1],如果 argv[1] 是非 assic,那么我会使用转换的这个函数。
谢谢大家。
相关文章:
- 如果没有malloc,链表实现将失败
- 模板参数替换失败,并且未完成隐式转换
- 具有默认模板参数的多态类的模板推导失败
- 视图中的参数推导失败:take_while
- 不同翻译单元中不可重载的非内联函数定义
- 链接到自行创建的dll失败
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- gcc和c++17的过载解析失败
- 为什么使用 P/Invoke 调用 dll 时,某些计算机中的 LoadLibrary 失败?
- 在WSL:configure_file上对config_file的每次调用都失败:配置文件时出现问题
- 使用 GCC 卸载的 OpenMP 卸载失败,并出现"Ptx assembly aborted due to errors"
- 使用cmake从源代码构建MySQL连接器/C++失败(与以前的声明冲突)
- 链接阶段在Ubuntu上失败,但在MacOS上失败
- 从父数组测试用例构造二叉树失败
- LibGit2 SSH身份验证失败
- 如何让LLDB在成功时退出,在失败时等待
- VS2017,C++包含目录与附加包含目录,子文件夹包含失败-但为什么
- 翻译演示翻译中文失败,可能是编码失败
- 构建失败 - 错误消息翻译