奇怪的xml / html重音问题

时间:2010-03-30 18:22:50

标签: java html xml utf-8 diacritics

我有一个XML文件,其中包含带有html标签的消息。 XML文件由java类读取,该类将其邮寄给人。收到邮件后,重音符号不会显示。例如é没有显示。

我在xml中尝试了é但它在eclipse中给出了一个错误,说明该实体尚未声明。

我也尝试过插入é,但在最终输出中没有显示任何内容。

我尝试的第三件事是使用<![CDATA[é]]>,但由于它没有输出任何内容,因此打破了解析器。

然而我注意到一些奇怪的东西。当我在xml中添加这样的东西并添加了UTF-16编码

<message>text bla bla blaa é&lt; 

它确实在最后输出了é像Bla bla blaa blaaé。

修改     <message>text bla bla blaa éé&lt;输出?é或只是一个é

该文件看起来像这样:

<?xml version="1.0"? encoding="UTF-16">

<message>
&lt;b&gt;hello é &lt;/b&gt;
</message>
</xml>

是什么给出了?

3 个答案:

答案 0 :(得分:2)

您尝试过将编码更改为UTF-8吗?

答案 1 :(得分:1)

您在标记中提供的编码密钥必须与用于编辑和保存硬盘驱动器上的xml文件的“真实”编码一致。

如果您在带有记事本的Windows下的某个欧洲国家/地区编辑了您的xml文件,它肯定会以cp1252编码(Windows在这种情况下使用的默认编码,注意cp1252是标准化ISO8859-1的一个轻微变体,包括欧元符号)。

实际上我建议使用一个编辑工具,它允许您准确控制在编辑/保存操作期间使用的编码(如http://jedit.org),这样您就可以保证有效的文件编码和给定的编码在其内容(所以在标签中)是相同的。

修改
它还在很大程度上取决于您的java程序读取xml文件并使用它的方式。 如果使用xml解析器,它应该没问题。否则,您可能必须使用ISO-8859-1编码来存储文件,因为它是java使用的默认读取编码。如果你非常不走运,而且java类中的文件读取过程使用了另一种编码,那么你必须遵守这个...

编辑2
它还取决于邮件客户端及其管理编码的方式......

答案 2 :(得分:0)

é实体是xml解析器试图解释的html实体。将&eacute;替换为&amp;eacute;,xml解析器只会解释生成所需html实体的&amp;

关于UTF-16编码,这里缺少的关键信息是文件的编码。听起来像文件以UTF-16格式保存而没有字节顺序标记,这可以解释为什么它只适用于指定的编码。您可以通过检查文件大小来验证这一点:它将是文件中字符数的两倍(如果您使用某些unicode字符,可能会多一点)。您可以尝试的其他可能的编码是UTF-8和iso-8859-1。