最后编辑于2022-04
如果图片是带有色情内容,没有json返回。不知道对curl的版本有没有要求。
static size_t baidu_img_censor_callback(void* ptr, size_t size, size_t nmemb, void* stream)
{
// 获取到的body存放在ptr中,先将其转换为string格式
ImgCensor_result = std::string((char*)ptr, size * nmemb);
return size * nmemb;
}
上面这个函数ptr变量的内容是: Invalid characters in string.
C++接口用到了curl, 是curl报的错。不知道对curl的版本有没有要求
收藏
点赞
0
个赞
请登录后评论
TOP
切换版块
问题已解决。由于返回的json是UTF-8编码,Window默认识别Unicode和ASCII,需要上面这个回调里先转码。
先从UTF-8转成UTF-16,再从UTF-16转成ASCII,问题解决。代码如下:
static size_t baidu_img_censor_callback(void* ptr, size_t size, size_t nmemb, void* stream)
{
// 获取到的body存放在ptr中,先将其转换为string格式
int nCharLen = size * nmemb;
TCHAR* czUnicodeTemp = new TCHAR[nCharLen + 1];
char* czASCIITemp = new char[nCharLen + 1];
memset(czUnicodeTemp, 0, (nCharLen + 1)*sizeof(TCHAR));
memset(czASCIITemp, 0, (nCharLen + 1) * sizeof(char));
memcpy(czASCIITemp, ptr, nCharLen);
MultiByteToWideChar(CP_UTF8, 0, czASCIITemp, nCharLen, czUnicodeTemp, nCharLen);
WideCharToMultiByte(CP_ACP, 0, czUnicodeTemp, nCharLen, czASCIITemp, nCharLen, 0, 0);
ImgCensor_result = czASCIITemp;
delete[] czUnicodeTemp;
delete[] czASCIITemp;
return size * nmemb;
}