我有一个XML文件,以<?xml version="1.0" encoding="iso-8859-2"?>
开头。我读了下面的方法:SAXException iso-8859-2
SAXParserFactory.newInstance().newSAXParser().parse(is, handler);
其中is
是InputStream和handler
是一些任意的处理程序。 后来我得到这个异常:
org.apache.harmony.xml.ExpatParser$ParseException: At line 41152, column 17: not well-formed (invalid token)
其实有在该位置一定程度的标志,封闭在一个CDATA这样的:
<![CDATA[something °]]>
使用的字符集ISO-8859-2,解析器应接受几乎任何角色,包括这一个。这似乎并非如此。我究竟做错了什么?
编辑
我做的这一切都在Android上。
奇怪:看起来解析器完全忽略了encoding属性。我将文件转换为UTF-8,同时保留标题,现在我的程序可以正确读取它。这是为什么??
(我正在InputStream的是这样的:new BufferedInputStream(new FileInputStream(filename))
,即没有一个阅读器,使得不能错误)
您确定数据*实际上*正确编码为ISO-8859-2吗? – 2013-03-18 15:46:32
根据[Wikipedia](https://en.wikipedia.org/wiki/ISO/IEC_8859-2),该字符在ISO-8859-2中被编码为B0。这是文件中该位置的实际字节吗? – 2013-03-18 15:54:04
是的,我在Notepad ++中打开它,它说“ANSI编码”,我有一个匈牙利语Windows,所以我敢肯定。 – szali 2013-03-18 15:54:10