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  的支持不是很好,就不能这样做。具体应该怎么做,我也暂时不清楚。

posted @ 2017-03-03 09:54  倾月轩萱  阅读(510)  评论(0编辑  收藏  举报