我正在为 Android 开发一个应用程序,我必须在其中解析不同的 XML 文件。它们中的大多数以 UTF-8 编码,但少数可能以 ISO-8859-1 编码。
HttpURLConnection con = (HttpURLConnection) url.openConnection();
...
in = con.getInputStream();
InputSource is = new InputSource(in);
...
parser.parse(is, handler);
我处理输入的代码如上所示。该java
文档说InputSource
:
如果没有字符流,但有字节流,则解析器将使用该字节流,使用 InputSource 中指定的编码,否则(如果未指定编码)使用算法自动检测字符编码,例如XML 规范。
我传入 aByteStream
并且我没有指定编码,因此根据文档,应该自动检测编码。但事实并非如此。所有以 UTF-8 编码的文件都很好,但 ISO-8859-1 的文件不是(我得到了一个Parser Expat... Exception for some invalid characters
)。如果我将InputSource
手动的编码设置为“ISO-8859-1”,它的行为则相反。
我该如何解决这个问题?我搜索了谷歌和Stackoverflow
几个小时,但没有找到解决方案。我也尝试将 a 传递CharacterStream
给,但ISO-8859-1 文件中的InputSource
某些字符仍显示为“?” (äöüÄÖÜß)
在我的应用程序中。
提前致谢!