编码转换

来源:互联网 发布:球球大作战cdk卡淘宝 编辑:程序博客网 时间:2024/04/30 19:21

#include <iconv.h>

#define BUFLEN 200
char inbuf[BUFLEN];
char outbuf[BUFLEN];
char* pin = inbuf;
char* pout = outbuf;

…打开文件,读入GB2312数据到inbuf,数据长度为 len

int inleft = len;
int outleft = BUFLEN;

iconv_t cd;
if((cd = iconv_open(“gb2312”, “unicode”)) == (iconv_t)-1)
return –1;
if(iconv(cd, &pin, &inleft, &pout, &outleft) == (size_t)-1)
return –1;
iconv_close(cd);

使用 iconv () 时,需要注意参数的使用,inleft 是输入缓冲区数据数据长度,outleft是输出缓冲区大小。(需要保证输出缓冲区足够大)。
转换以后,outleft 是outbuf中空闲空间的大小,所以 BUFLEN-outleft 才是真正的Unicode数据长度。
注意:不论是GB2312编码,还是Unicode编码,在内存中都是一些字节序列,所以我们可以统一用 类型为 char(或者unsignedchar)的字符数组来保存。所以,BUFLEN-outleft 是 字符(char)个数,而不是Unicode字符个数。

 

 

ansi : ASCII

Unicoce: UCS2-LE UCS2-BE