我正在尝试解析来自不同来源的 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/