std::string code_convert(char* source_charset, char* to_charset, const std::string& sourceStr) //sourceStr是源编码字符串
{
libiconv_t cd = libiconv_open(to_charset, source_charset);//获取转换句柄,void*类型
if (cd == 0) {
libiconv_close(cd);
return "";
}
size_t inlen = sourceStr.size();
size_t outlen = 255;
const char* inbuf = sourceStr.c_str();
char outbuf[255];//这里实在不知道需要多少个字节,这是个问题
memset(outbuf, 0, outlen);
char* poutbuf = outbuf; //多加这个转换是为了避免iconv这个函数出现char(*)[255]类型的实参与char**类型的形参不兼容
if (libiconv(cd, &inbuf, &inlen, &poutbuf, &outlen) == -1){
libiconv_close(cd);
return "";
}
std::string strTemp(outbuf);//此时的strTemp为转换编码之后的字符串
libiconv_close(cd);
return strTemp;
}
//gbk转UTF-8
std::string GbkToUtf8(const std::string& strGbk)// 传入的strGbk是GBK编码
{
return code_convert((char*)"utf-8",(char *) "gb2312", strGbk);
}