linux汉字编码转换问题
由于做的项目需要一个UDP调试终端,在程序中涉及到汉字的显示问题,但在linux下是utf-8的编码,在windows下是不支持的,所以就需转化以下。
具体的方法是iconv 用到iconv.h库
参考代码:
//代码转换:从一种编码转为另一种编码 int code_convert(char *from_charset,char *to_charset,char *inbuf,int inlen,char *outbuf,int outlen) { iconv_t cd; int rc; char **pin = &inbuf; char **pout = &outbuf; cd = iconv_open(to_charset,from_charset); if (cd==0) return -1; memset(outbuf,0,outlen); if (iconv(cd,pin,&inlen,pout,&outlen)==-1) return -1; iconv_close(cd); return 0; } //UNICODE码转为GB2312码 int u2g(char *inbuf,int inlen,char *outbuf,int outlen) { return code_convert("utf-8","gbk",inbuf,inlen,outbuf,outlen); } void udp_printf(char *fmt, ...) { va_list ap; int len1, len; unsigned char string[256],str[256]; va_start(ap, fmt); len=vsprintf(string, fmt, ap); u2g(string,strlen(string),str,OUTLEN);//编码转换 client_sockaddr.sin_port = htons(port_debug); sendto(sockfd, str, strlen(string), 0, (struct sockaddr *)&client_sockaddr, sizeof(client_sockaddr));//udp发送数据 va_end(ap); }
这样在linux下就能实现汉字编码的转换,就不会出现乱码的现象。
但是若要用在uclinux下,还是有问题。uclinux编译的库是uclib,好像对iconv 的支持不是很好,就不能这样做。具体应该怎么做,我也暂时不清楚。