SAXException iso-8859-2

时间:2013-03-18 15:45:36

标签: android xml character-encoding sax iso-8859-2

我有一个以<?xml version="1.0" encoding="iso-8859-2"?>开头的XML文件。我用以下方式阅读:

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 °]]>

使用charset iso-8859-2,解析器应该接受几乎任何字符,包括这个字符。事实似乎并非如此。我做错了什么?

修改

我在Android上做这一切。

很奇怪:似乎解析器完全忽略了编码属性。我将文件转换为UTF-8,同时保留标题,现在我的程序可以正确读取它。为什么???

(我正在制作像这样的InputStream:new BufferedInputStream(new FileInputStream(filename)),即没有读者,所以这不是错误。)

1 个答案:

答案 0 :(得分:0)

我通过手动识别编码来解决错误。我查看了XML标头并查找了encoding属性(如果可用),作为String提取,由Charset从中创建了一个Java Charset.forName()对象,然后创建了一个给定的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);

不幸的是,我仍然不知道为什么解析器无法自动识别编码。