使用C++调用图像内容审核问题
deskland 发布于2021-08 浏览:1249 回复:1
0
收藏
最后编辑于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
个赞
共1条回复 最后由deskland回复于2021-08
#2deskland回复于2021-08

问题已解决。由于返回的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;
}

 

0
TOP
切换版块