在使用nodeJS的addons模块进行处理中文字符的时候,总是乱码。期间查询过很多关于C++或者C的中文乱码解决办法,但是大多都是直接在原生的C以及C++中使用,并没有专门的在V8引擎中直接使用的实例,由此我从网上拷贝了几个代码过来后,发现编译的过程中一直都是报错的,也就是说无法直接使用啊!通过跟底层开发的同事的不断努力,终于在nodeJS中搞出来了编码转换的问题,并且测试通过,代码如下:
int code_convert(char *from_charset,char *to_charset,char *inbuf,size_t* inlen,char *outbuf,size_t* outlen){
iconv_t cd;
int rc;
char **pin = &inbuf;
char **pout = &outbuf;
cd = iconv_open(to_charset,from_charset);
if (cd==0) return -1;
std::memset(outbuf,0,(int)(*outlen));
if (iconv(cd,pin,inlen,pout,outlen)==-1) return -1;
iconv_close(cd);
return 0;
}
//UNICODE码转为GB2312码
int u2g(char *inbuf,size_t* inlen,char *outbuf,size_t* outlen){
return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
//GB2312码转为UNICODE码
int g2u(char *inbuf,size_t* inlen,char *outbuf,size_t* outlen){
return code_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);
}
使用方法
int inLen = strlen(ctext);
size_t inLenSize,outLenSize;
inLenSize = inLen;
outLenSize = 256;
char outBuf[outLenSize];
//printline();
int convLen = u2g(ctext, &inLenSize,outBuf,&outLenSize);