1

我正在为 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>标记开始。我应该如何得到它?

4

2 回答 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 回答