本文主要是介绍汉字编码转换的实现,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
首先在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,先写这么多…
这篇关于汉字编码转换的实现的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!