#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(或者unsigned char)的字符数组来保存。所以,BUFLEN-outleft 是 字符(char)个数,而不是Unicode字符个数。
ansi : ASCII
Unicoce: UCS2-LE UCS2-BE