汉字编码转换的实现

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

/*test1.c*/
#include 
#include 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 
#include 
#include 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,先写这么多…


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部