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