我正在为 android 编写一个 rss 阅读器应用程序,现在我需要在开始解析之前知道 xml 的编码是什么(windows-1251 或 utf-8)。这在 xml 声明标题中进行了描述,即<?xml version="1.0" encoding="UTF-8"?>
。在解析之前如何获取此标头?我使用 sax 解析器的 android.sax 实现并将编码作为字符串参数传递给 InputStreamReader。我发现了一个相关的问题:
SAX Parser doesn't identify windows-1255 encoding - 但是解决方案是将 cp-1251 转换为 utf-8,这太麻烦且对资源的要求很高。我认为必须有更好的解决方案,因为我只需要知道来自 header 的编码值<?xml version="1.0" encoding="UTF-8"?>
。但我无法从 xml 中获取此标头,解析器从<rss>
标记开始。我应该如何得到它?
问问题
1434 次
2 回答
0
好吧,这个问题很明显:) 根据 Squonk 的评论,这是有效的代码:
byte[] data = new byte[50];
try{
bs.mark(60);
bs.read(data, 0, data.length);
String value = new String(data,"UTF-8");
if(value.toLowerCase().contains("utf-8"))
return "UTF-8";
else if(value.contains("1251"))
return "windows-1251";
} catch (IOException e) {
Log.d("debug", "Exception: " + e);
return "XML not found";
}
然后只需重置 bs (BufferedInputStream) 并在任何需要的字符集中使用它。
于 2012-12-17T23:54:42.457 回答
0
我建议切换到 Android 官方支持的xmlPullParser,编码支持问题应该会消失。
这是关于它的Android文档。
不要小看这一点,因为 SAX 解析器在 Android v3.0+ 中无法正常工作
于 2012-12-17T21:54:37.930 回答