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

我试图解析来自不同来源(我对此几乎没有控制权)的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声明确定编码?

我发现艾伦对这个问题的回答具有误导性,我根据约恩·霍斯特曼的评论和后来的经验提供了另一种答案。

以上是 如何让SAX解析器根据xml声明确定编码? 的全部内容, 来源链接: utcz.com/qa/399001.html

回到顶部