C语言汉字gbk转utf-8
一、注意事项
1.请注意汉字内码(对应字符为xcc等)和打印出的转义字符(\xcc)的区别!!!!该问题导致我们程序调试了差不多一整天!
见:C语言中转义字符的使用
2.另外库函数iconv会把传入的参数指针移位,这是正常的、请不要认为是自己程序有问题。
3.我的终端是utf-8格式,对于其他编码不能显示。
二、看看code
1.test.c
#include <iconv.h> #include <stdio.h> #include <string.h> int code_convert(char *inbuf,int inlen,char *outbuf,int outlen) { iconv_t cd; int rc; char **pin = &inbuf; char **pout = &outbuf; cd = iconv_open("UTF-8","GB2312"); if (cd==0) return -1; memset(outbuf,0,outlen); if (iconv(cd,pin,&inlen,pout,&outlen) == -1) return -1; iconv_close(cd); return 0; } int main(){ char src[4096] = "xccxb7xbfxad"; //注意:此处写为char src[4096] = "ccb7bfad";将不会被转换,因为系统认为是英文字母、而不是gbk的内码! char dst[4096]; int srclen = 4096; int dstlen = 4096; int ret = code_convert(src,srclen,dst,dstlen); printf("TK--------->>>>ret is %d src is %s dst is %s ",ret,src,dst); return 0; }
2.gcc test.c -o test
3../test
TK--------->>>>ret is -1 src is ̷�� dst is 谭凯
三、iconv命令的正确使用
1.错误做法
vi input
xccxb7xbfxad
iconv -f gb2312 -t utf-8 input >output
vi output
xccxb7xbfxad
原因:在编程时x是一个转义字符,可以说明xcc只是一个十六进制的字符;但在文件中不可以这样做!
2.正确做法
vi input
谭凯
iconv -f gb2312 -t utf-8 input >output
vi output
Ì·¿
四、项目总结
当遇到底层上报有误,即:把"xcc"上报成"\xcc"时(前者包含一个字符‘xcc’,后者包含4个字符"\" ,"x","c","c")可以用提取后边两个字符,完后在添加的方法解决。
解决方法如下:
1.代码
#include <stdio.h> #include <string.h> #include <stdlib.h> #include <iconv.h> long atox(char *s){ return strtol(s,NULL,16); } int main() { char a[17] = "\xcc\xb7\xbf\xad"; printf("a is %s strlen(a) is %d ",a,strlen(a)); a[4] = " "; a[8] = " "; a[12] = " " ; if(a[0] == "\"){ printf("atoi(&a[2]) is %d ",atox(&a[2])); printf("atoi(&a[6]) is %d ",atox(&a[6])); printf("atoi(&a[10]) is %d ",atox(&a[10])); printf("atoi(&a[14]) is %d ",atox(&a[14])); } return 0; }
2.gcc test.c -o test
./test
a is xccxb7xbfxad strlen(a) is 16 atoi(&a[2]) is 204 atoi(&a[6]) is 183 atoi(&a[10]) is 191 atoi(&a[14]) is 173
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。