不同平台下iconv函数结果不同?
****************************字符串定义******************************************
chargeo_addr[100]="xxxxxxxxxx";//由于在Linux下不能正常显示UTF-8编码的汉字,也不
能正常保存,我用XXX表示,XXX内容为“四川省成都市双流县”汉字字符串的UTF-8编码形
式
chargeo_addr_gb2312[100];//这是要得到的结果,应该为“四川省成都市双流县”
****************************实现函数*******************************************
采用函数u2g实现unicodeUTF-8汉字转换成GB2312汉字
//unicodetogb2312
rc=u2g(geo_addr,strlen(geo_addr),geo_addr_gb2312,sizeof(geo_addr_gb2312));
函数的实现见下面代码:在iconv_app.c文件中
****************************平台1PC虚拟机Linuxredhat***********************
[PC虚拟机redhatLinux]#uname-r
2.6.18-53.el5
[PC虚拟机redhatLinux]#arm-linux-gcc-v
gccversion4.3.2
[PC虚拟机redhatLinux]#gcc-v
gccversion4.3.2
执行函数u2g,rc=0,geo_addr_gb2312[]="四川省成都市双流县"
正确
****************************平台2ARM迷你2440Linux***************************
mini2440ARMLinux启动内核信息如下:
Linuxversion2.6.29.4-FriendlyARM(gccversion4.3.2)
执行函数u2g,rc=-1,geo_addr_gb2312[]=(无显示)
错误
*****************************iconv_app.c文件内容如下***************************
#include
#include
#include
#include
//代码转换:从一种编码转为另一种编码
intcode_convert(char*from_charset,char*to_charset,char*inbuf,intinlen,char
*outbuf,intoutlen)
{
iconv_tcd;
intrc;
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);
return0;
}
//UNICODE码转为GB2312码
intu2g(char*inbuf,intinlen,char*outbuf,intoutlen)
{
returncode_convert("utf-8","gb2312",inbuf,inlen,outbuf,outlen);
}
//GB2312码转为UNICODE码
intg2u(char*inbuf,size_tinlen,char*outbuf,size_toutlen)
{
returncode_convert("gb2312","utf-8",inbuf,inlen,outbuf,outlen);
}
分 -->
|