当前位置: 首页 > 面试题库 >

如何让SAX解析器根据xml声明确定编码?

谭铭
2023-03-14
问题内容

我试图解析来自不同来源(我对此几乎没有控制权)的xml文件。其中大多数都使用UTF-8编码,使用以下代码段不会造成任何问题:

SAXParserFactory factory = SAXParserFactory.newInstance();
SAXParser parser = factory.newSAXParser();
FeedHandler handler = new FeedHandler();
InputSource is = new InputSource(getInputStream());
parser.parse(is, handler);

由于SAX默认为UTF-8,所以很好。但是,一些文档声明:

<?xml version="1.0" encoding="ISO-8859-1"?>

即使已声明ISO-8859-1,SAX仍默认为UTF-8。仅当我添加:

is.setEncoding("ISO-8859-1");

SAX将使用正确的编码。

如何让SAX自动从xml声明中检测正确的编码,而无需我专门进行设置?我需要这个,因为我事先不知道文件的编码是什么。

在此先感谢,艾伦


问题答案:

当您希望Sax自动检测编码时,请使用 InputStream 作为
InputSource的

参数。

如果要设置特定的编码,请使用具有指定编码或setEncoding方法
Reader

为什么?因为自动检测编码算法需要原始数据,而不是转换为字符。

主题中的问题是: 如何让SAX解析器根据xml声明确定编码?
我发现艾伦对这个问题的回答具有误导性,我根据约恩·霍斯特曼的评论和后来的经验提供了另一种答案。



 类似资料:
  • 问题内容: 我正在从REST服务接收XML文档,该文档将使用SAX进行解析。请参见以下示例,它是从XSD生成的。 设置解析器不是问题。我的主要问题是在实际的处理,方法等,我不知道如何提取我需要的项目,并将其作为他们有些“嵌套”。 例 所述可发生一次或两次,并且可以包含任意数量的其-in了转向有关于一个连接的信息的元素。基本上,我需要与他们的所有连接的列表,和。我必须为每个元素创建一个类吗? 就我所

  • 问题内容: 它很好用,但是我希望它返回一个包含所有字符串的数组,而不是最后一个元素返回一个字符串。 任何想法如何做到这一点? 问题答案: 因此,你想构建一个XML解析器来解析这样的RSS feed。 现在,你可以使用两个SAX实现。你可以使用org.xml.sax或android.sax实现。在发布简短的示例后,我将解释两者的优点和缺点。 android.sax Implementation 让我

  • 问题内容: 它很好用,但是我希望它返回一个包含所有字符串的数组,而不是最后一个元素返回一个字符串。 任何想法如何做到这一点? 问题答案: 因此,你想构建一个XML解析器来解析这样的RSS feed。 现在,你可以使用两个SAX实现。你可以使用org.xml.sax或android.sax实现。在发布简短的示例后,我将解释两者的优点和缺点。 android.sax实现 让我们从实现开始。 你首先必须

  • 主要内容:Java SAX解析器 解析XML文档的示例Java SAX解析器 解析XML文档的示例 需要解析的文件input.xml 编写DefaultHandler的事件处理程序 编写核心解析处理类 输出结果为:

  • 首先,我认为这个错误是因为一个确切的文件。但是错误发生在不同的文件在不同的时间。如何使SAX解析器停止连接到Internet?

  • 主要内容:Java SAX解析器 修改XML文档的示例Java SAX解析器 修改XML文档的示例 需要修改的文件input.xml 编写修改XML文档的解析处理类 控制台输出结果为: 在项目根目录下生成新的文件input-updated.xml,内容如下: