当前位置: 技术问答>linux和unix
怎样用printf()正常打印出utf8的中文?
来源: 互联网 发布时间:2015-12-03
本文导语: uft8编码的中文直接用printf打印是乱码,请问如何转换成可打印的ansi编码?据说可以用wcstombs(),mbstowcs(),和setlocale(),可以说说这几个函数怎样用么?setlocale函数的第二个参数有哪些选项? | #include ...
uft8编码的中文直接用printf打印是乱码,请问如何转换成可打印的ansi编码?据说可以用wcstombs(),mbstowcs(),和setlocale(),可以说说这几个函数怎样用么?setlocale函数的第二个参数有哪些选项?
|
#include
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;
//printf("pin is %d,pout is %dn",inlen,outlen);
iconv_close(cd);
return 0;
}
//UNICODEÂëתΪGB2312Âë
int u2g(char *inbuf,int inlen,char *outbuf,int outlen)
{
return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
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;
//printf("pin is %d,pout is %dn",inlen,outlen);
iconv_close(cd);
return 0;
}
//UNICODEÂëתΪGB2312Âë
int u2g(char *inbuf,int inlen,char *outbuf,int outlen)
{
return code_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
|
如果是 zh_CN.UTF-8应该不用吧,如果是 zh_CN.GB2312 以上的 可以用 iconv 转换成 gb2312 以上的字符集 然后 printf();