iconv编码转换
函数原型
int CMstdsQuery::IconvQuerySQL(const char *to, const char *from,
const char *in, size_t inlen, char **out, size_t *outlen)
参数说明
输入参数
to:目的编码
from:原始编码
in:要转换的字符串指针
inlen:要转换的字符串长度
输出参数
out:转换后的字符串指针
outlen:转换后的字符串长度
函数实现
int CMstdsQuery::IconvQuerySQL(const char *to, const char *from,
const char *in, size_t inlen, char **out, size_t *outlen)
{
if(NULL == in || inlen < 0){
return -1;
}
iconv_t icd;
size_t ret;
icd = iconv_open(to, from);
if(icd == ((iconv_t) -1)){
return -1;
}
char *inbuf = new char[inlen];
if(inbuf == NULL){
iconv_close(icd);
return -1;
}
char *inbufleft = inbuf;
size_t inbufleftlen = inlen;
memcpy(inbuf, in, inlen);
size_t outbuflen = inlen * 2;
char *outbuf = new char[outbuflen];
if(outbuf == NULL){
delete[] inbuf;
iconv_close(icd);
return -1;
}
char *outbufleft = outbuf;
size_t outbufleftlen = outbuflen;
iconv(icd,NULL,0,NULL,0);
ret = iconv(icd, &inbufleft, (size_t *)&inbufleftlen, &outbufleft, (size_t *)&outbufleftlen);
if(ret == (size_t) -1){
delete[] inbuf;
delete[] outbuf;
iconv_close(icd);
return ret;
}
delete[] inbuf;
iconv_close(icd);
*out = outbuf;
*outlen = outbuflen - outbufleftlen;
return 0;
}
读后感
欢迎沟通交流。