首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SAXException iso-8859-2

SAXException iso-8859-2
EN

Stack Overflow用户
提问于 2013-03-18 15:45:36
回答 1查看 300关注 0票数 1

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

代码语言:javascript
复制
SAXParserFactory.newInstance().newSAXParser().parse(is, handler);

其中is是一个InputStream,handler是一些任意的处理程序。然后我得到了这个例外:

代码语言:javascript
复制
org.apache.harmony.xml.ExpatParser$ParseException: At line 41152, column 17: not well-formed (invalid token)

实际上,在那个位置有一个学位标志,它包含在这样的光盘中:

代码语言:javascript
复制
<![CDATA[something °]]>

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

编辑

这一切我都是用Android做的。

怪异:解析器似乎完全忽略了编码属性。我将文件转换为UTF-8,同时保持原样,现在我的程序可以毫无错误地读取它。那是为什么?

(我将InputStream设置为:new BufferedInputStream(new FileInputStream(filename)),即没有读取器,所以不可能是错误。)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-27 10:39:15

我通过手动识别编码来解决错误。我查看了XML,查找了encoding属性(如果可用的话),该属性提取为字符串,由Charset.forName()从它创建了一个Java Charset对象,然后使用给定的编码和在该阅读器上创建了一个InputSource,如下所示:

代码语言:javascript
复制
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);

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15480966

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档