2013-01-10 41 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);