java - 如何让 SAX 解析器从 xml 声明中确定编码?

标签 java xml encoding sax xml-parsing

我正在尝试解析来自不同来源的 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 声明中检测正确的编码,而无需我专门设置它?我需要这个,因为我事先不知道文件的编码是什么。

提前致谢, 艾伦

最佳答案

使用 InputStream 作为 InputSource 的参数当您希望 Sax 自动检测编码时。

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

为什么?因为autodetection encoding algorithms需要原始数据,而不是转换为字符。

主题中的问题是:如何让 SAX 解析器从 xml 声明中确定编码? 我发现 Allan 对这个问题的回答具有误导性,因此我根据 Jörn Horstmann 的评论和我后来的经历。

关于java - 如何让 SAX 解析器从 xml 声明中确定编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3482494/

相关文章:

java - new Date() 和文件创建日期之间的奇怪区别

java - hibernate映射中可以映射多少个表?

java - 如何在 selenium webdriver 3.0 beta 中使用 geckodriver?

xml - XML 与 RDMS 相比的优点/缺点

python - 使用元素树读取 xml 文件

database - 如何将 postgreSQL 中的数据库转换为 utf8?

java - Hibernate : Infinite recursion, 如何解决?

xml - 错误 : S4s-elt-character: Non-whitespace Characters Are Not Allowed In Schema Elements Other Than 'xs:appinfo' And 'xs:documentation'

html - 除了扩展名之外,.json、.txt、.html、.css 和 .js 文件之间是否有任何区别?

python - 批量发出请求时出现编码问题?