如何让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