编码转换

50 篇文章 1 订阅
32 篇文章 0 订阅

#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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值