簡體   English   中英

SAXException iso-8859-2

[英]SAXException iso-8859-2

我有一個以<?xml version="1.0" encoding="iso-8859-2"?>開頭的XML文件。 我按以下方式閱讀:

SAXParserFactory.newInstance().newSAXParser().parse(is, handler);

where is一個InputStream,而handler是一些任意處理程序。 然后我得到這個異常:

org.apache.harmony.xml.ExpatParser$ParseException: At line 41152, column 17: not well-formed (invalid token)

實際上,在該位置上有一個度數符號,封裝在CDATA中,如下所示:

<![CDATA[something °]]>

使用charset iso-8859-2,解析器應該接受幾乎所有字符,包括該字符。 似乎並非如此。 我究竟做錯了什么?

編輯

我正在Android上進行所有操作。

很奇怪:解析器似乎完全忽略了編碼屬性。 我將文件轉換為UTF-8,同時保留標題不變,現在我的程序可以讀取它而沒有錯誤了。 這是為什么??

(我使InputStream像這樣: new BufferedInputStream(new FileInputStream(filename)) ,即沒有閱讀器,因此不會是錯誤。)

我通過手動識別編碼來解決該錯誤。 我偷看了XML標頭,並尋找了encoding屬性(如果可用),提取為字符串,然后通過Charset.forName()從中創建了Java Charset對象,然后使用給定的編碼器創建了Reader,並在該Reader上設置了InputSource,例如這個:

String encoding;
Charset charset;
[...]
    Reader reader = new BufferedReader(new InputStreamReader(inputStream, charset));
    InputSource inputSource = new InputSource(reader);
    inputSource.setEncoding(encoding);
    SAXParserFactory.newInstance().newSAXParser().parse(inputSource, myHandler);

不幸的是,我仍然不知道為什么解析器無法自動識別編碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM