汉字编码转换的实现

首先在ubuntu环境测试一下汉字的编码类型

/*test1.c*/
#include <stdio.h>
#include <string.h>

int main(void)
{
        unsigned char arr[] = "余";
        unsigned int len, i;

        len = strlen(arr);
        printf("length: %d byte\n",len);
        printf("code  : ");
        for(i=0;i<len;i++)
        {   
                printf("%X",arr[i]);
        }   
        printf("\n");

        return 0;
}
/*输出结果*/
length: 3 byte
code  : E4BD99

通过查询”余“的各类编码形式:
在这里插入图片描述
可知ubuntu是以UTF-8的编码方式存储汉字的。

下面尝试一下转换成GB2312编码。

UTF-8转GB2312

/*test2.c*/
#include <stdio.h>
#include <iconv.h>
#include <string.h>

int changeCode(char *, int, char *,int);

iconv_t code;

int main(void)
{
	unsigned char used[] = "余";
	unsigned char new[10];
	unsigned int len_used, len_new, len_dest, k; 
	unsigned int i = 0;

	len_used = strlen(used);
	len_new = sizeof(new);
	memset(new, 0, len_new);
	code = iconv_open("gb2312","utf-8");
	len_dest = len_new - changeCode(new,len_new,used,len_used);
	while(len_dest--)
	{
		printf("%X",new[i++]);
	}
	printf("\n");

	return 0 ;
}

int changeCode(char *destbuf, int destlen, char *srcbuf, int srclen) 
{   
	size_t inlen;
	size_t outlen;
	char **inbuf, **outbuf;

	inlen = srclen;
	outlen = destlen;
	inbuf = &srcbuf;
	outbuf = &destbuf;
	iconv(code, inbuf, &inlen, outbuf, &outlen);    

	return outlen;   
}
/*输出结果*/
D3E0

其中返回的outlen为转换后剩余的空间,那么使用

len_dest = len_new - changeCode(new,len_new,used,len_used);

语句就可以得到转换后有多少个字节了。
用一个小软件验证一下结果:
在这里插入图片描述
OK,先写这么多…

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值