RedHat中xml文件无法显示中文

程序最初是在windows下运行的,其中一个操作室,根据id 输出xml文件中的相应部分。可是让源码移至到Linux下后(RedHat版),重新编译,生成可执行程序。在执行时发现,值输出了XML文件中的英文部分,只要涉及到中文的行都没输出。例如:

***********************************************************************\n
* 修改指定数据库属性 *\n
***********************************************************************\n
<mnt format> : 特征格式,值为:mntfmt_xgw, mntfmt_lcw, mntfmt_mix\n
<cpr method> : \n
在windows下的输出结果是:

***********************************************************************
* 修改指定数据库属性 *
***********************************************************************
<mnt format> : 特征格式,值为:mntfmt_xgw, mntfmt_lcw, mntfmt_mix
<cpr method> : 
在Linux下的输出结果是
***********************************************************************

***********************************************************************

<cpr method> : 

总结就是,只要涉及到中文的所在行,无论中英文,都不显示。

想请问下,这到底是为什么,以及如何解决,谢谢大家。

作者: tiantang_85   发布时间: 2011-01-14

这显然是编码转换问题。
首先确保你的系统中安装了中文字体。
输入locale命令,看看LANG,LC_ALL, LC_CTYPE等这些系统环境变量都是什么值。
看看你的xml文件是用的什么编码。用iconv试着转换一下看看能不能看到xml中的中文部分。

作者: jcwKyl   发布时间: 2011-01-15

装的是中文系统,所以自然有中文字体。
 $locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
 
$iconv chdbproprc_zh.xml
<?xml version="1.0" encoding="UTF-8" ?>
<GAFIS_RESOURCE version="1.0" langid="0x2052" >
<STRINGTABLE>
<ITEM id="200">
<STRDATA>
<![CDATA[
***********************************************************************\n
* 修改指定数据库属性 *\n
***********************************************************************\n

<mnt format> : 特征格式,值为:mntfmt_xgw, mntfmt_lcw, mntfmt_mix\n
<cpr method> : \n
\n ]]>
</STRDATA>
</ITEM>
<ITEM id="220" value="成功改变数据库属性 %s 成功!&#13;&#10; "/>
<ITEM id="221" value="更新后的数据库属性:&#13;&#10; "/>
</STRINGTABLE>
</GAFIS_RESOURCE>


相应命令的大概输出如上

作者: tiantang_85   发布时间: 2011-01-15

引用楼主 tiantang_85 的回复:
程序最初是在windows下运行的,其中一个操作室,根据id 输出xml文件中的相应部分。可是让源码移至到Linux下后(RedHat版),重新编译,生成可执行程序。在执行时发现,值输出了XML文件中的英文部分,只要涉及到中文的行都没输出。例如:

***********************************************************************\n……


装的是中文系统,所以自然有中文字体。
 $locale
LANG=zh_CN.UTF-8
LC_CTYPE="zh_CN.UTF-8"
LC_NUMERIC="zh_CN.UTF-8"
LC_TIME="zh_CN.UTF-8"
LC_COLLATE="zh_CN.UTF-8"
LC_MONETARY="zh_CN.UTF-8"
LC_MESSAGES="zh_CN.UTF-8"
LC_PAPER="zh_CN.UTF-8"
LC_NAME="zh_CN.UTF-8"
LC_ADDRESS="zh_CN.UTF-8"
LC_TELEPHONE="zh_CN.UTF-8"
LC_MEASUREMENT="zh_CN.UTF-8"
LC_IDENTIFICATION="zh_CN.UTF-8"
LC_ALL=
 
$iconv chdbproprc_zh.xml
<?xml version="1.0" encoding="UTF-8" ?>
<GAFIS_RESOURCE version="1.0" langid="0x2052" >
<STRINGTABLE>
<ITEM id="200">
<STRDATA>
<![CDATA[
***********************************************************************\n
* 修改指定数据库属性 *\n
***********************************************************************\n

<mnt format> : 特征格式,值为:mntfmt_xgw, mntfmt_lcw, mntfmt_mix\n
<cpr method> : \n
\n ]]>
</STRDATA>
</ITEM> 
<ITEM id="220" value="成功改变数据库属性 %s 成功!&#13;&#10; "/>
<ITEM id="221" value="更新后的数据库属性:&#13;&#10; "/>
</STRINGTABLE>
</GAFIS_RESOURCE>


相应命令的大概输出如上

作者: tiantang_85   发布时间: 2011-01-15

用iconv命令转换一下看看能不能把xml文件正常输出,可以看到中文。
你的xml文件是直接从windows下面复制过来的吧,我猜应该是CP936。
你上面的回复说明你用iconv命令是能正常看到你的xml文件内容的。

所以问题就定位在你的应用程序上面了。你的应用程序代码中并没有支持多字节编码。你的代码是什么语言写的,如果是C的话试着用setlocale设置一下语言试试,如果是别的语言,可以在google上搜索一下那个语言对多字节编码和unicode的支持。

作者: jcwKyl   发布时间: 2011-01-15