[英]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.