繁体   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