2013-01-10 42 views
0

使用撒克逊语处理xml文件:http://meltwaternews.com/magenta/xml/html/18/2/rss/v2_406837.rss2.XML其中包括一些挪威人字符,如Æ,Ø,Å。 XML编码为UTF-8撒克逊语与挪威语字符问题

然而,发生错误:非法HTML字符:十进制152(http://meltwater.vacau.com/s2.png)

但是十进制152是〜,可以在原始的xml文件中找不到。

如果我使用windows-1252来处理这个带有Saxon的xml文件,我实际上可以看到Æ,Ø,Å被错误解析为Ã〜Ã¥(你可以在这里看到小数点152)(http:/ /meltwater.vacau.com/s1.png)。

有人可以建议如何使它正确吗?

+0

是否错误识别它认为不好的性格是在文件中的偏移?您链接到http://meltwater.vacau.com/s2.png似乎不起作用。 –

+0

http://meltwater.vacau.com/*.png的链接似乎不起作用。另外,在windows-1252中,十进制数152不是'〜'(0x7F或127十进制),而是上标“〜”。 –

+0

我通过Saxon 6.5.5和Saxon 9.4.0.3中的身份模板样式表运行XML,没有任何困难。样式表中是否有坏字符,而不是XML输入? –

回答

1

使用字符映射。

<xsl:character-map name="meltwater_fix"> 
    <xsl:output-character character="&#152;" string="˜"/> 
</xsl:character-map> 

,然后添加到输出元件:

<xsl:output> or <xsl:result-document> 

以下属性:

use-character-maps="meltwater_fix" 
0

我与挪威字符 'O' 的同样问题。问题不是撒克逊人特有的,问题也存在于Apache xalan中。 Illegal HTML character: decimal 152

我设法得到它通过确保无论是XML和XSL文件被正确编码工作(某些文本编辑器可以显示正确的文本,但仍然将文档保存为UTF-8或一些其他的编码)。我使用vim :write ++enc=ISO-8859-1保存了所有测试文档,以确保文档以正确的编码进行保存。

我还必须指定XSL变压器的输出编码:

String encoding = "ISO-8859-1"; 
Transformer transformer = transformerFactory.getTransformer(xsltDocumentSource); 
transformer.setOutputProperty(OutputKeys.ENCODING, encoding);