我正在开发一款Android应用程序,需要解析不同的XML文件。其中大部分文件采用UTF-8编码,但是少数文件可能采用ISO-8859-1编码。
HttpURLConnection con = (HttpURLConnection) url.openConnection();
...
in = con.getInputStream();
InputSource is = new InputSource(in);
...
parser.parse(is, handler);
我用于处理输入的代码如上所示。关于InputSource
,java
文档中写道:
如果没有字符流但是有字节流,则解析器将使用该字节流,并使用InputSource中指定的编码(如果未指定编码,则使用诸如XML规范中所述的算法自动检测字符编码)。
我传入了一个ByteStream
,没有指定编码,因此根据文档应该自动检测编码。但实际上并没有这样做。所有以UTF-8编码的文件都可以正常工作,但ISO-8859-1编码的文件不行(我得到了一个Parser Expat... Exception for some invalid characters
)。如果我手动将InputSource
的编码设置为"ISO-8859-1",情况会反过来。
我该怎么解决呢?我在Google和Stackoverflow
上搜索了数小时,但仍然找不到解决方案。我也尝试将CharacterStream
传递给InputSource
,但ISO-8859-1文件中的一些字符(äöüÄÖÜß)
仍然在我的应用程序中显示为"?"。
提前致谢!