NodeJS addons 中文乱码处理

在使用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);

发表评论

电子邮件地址不会被公开。 必填项已用*标注