我有一个XML文件,其中包含带有html标签的消息。 XML文件由java类读取,该类将其邮寄给人。收到邮件后,重音符号不会显示。例如é没有显示。
我在xml中尝试了é
但它在eclipse中给出了一个错误,说明该实体尚未声明。
我也尝试过插入é
,但在最终输出中没有显示任何内容。
我尝试的第三件事是使用<![CDATA[é]]>
,但由于它没有输出任何内容,因此打破了解析器。
然而我注意到一些奇怪的东西。当我在xml中添加这样的东西并添加了UTF-16编码
<message>text bla bla blaa é<
它确实在最后输出了é像Bla bla blaa blaaé。
修改
<message>text bla bla blaa éé<
输出?é或只是一个é
该文件看起来像这样:
<?xml version="1.0"? encoding="UTF-16">
<message>
<b>hello é </b>
</message>
</xml>
是什么给出了?
答案 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;
,xml解析器只会解释生成所需html实体的&
。
关于UTF-16编码,这里缺少的关键信息是文件的编码。听起来像文件以UTF-16格式保存而没有字节顺序标记,这可以解释为什么它只适用于指定的编码。您可以通过检查文件大小来验证这一点:它将是文件中字符数的两倍(如果您使用某些unicode字符,可能会多一点)。您可以尝试的其他可能的编码是UTF-8和iso-8859-1。