[cpp]
//////////////////////////////////////////////////////////////////////////
//编码转换
int char_covert(const char *src, const char *desc, const char *input, size_t ilen, char *output, size_t olen)
{
const char **pin = &input;
char **pout = &output;
iconv_t cd = iconv_open(desc, src);
if (cd == (iconv_t)-1){
return -1;
}
memset(output, 0, olen);
if (iconv(cd, pin, &ilen, pout, &olen) == (size_t)-1) {
iconv_close(cd);
return -1;
}
iconv_close(cd);
return 0;
}
[/cpp]
网上有很多教程都很模糊
需要注意的是 iconv 函数会修改指针*inbuf 和指针*outbuf的值,因此需要保存原输入、输出内存分配的地址值。