如何获取 XML 声明标头?人造人



我正在为Android编写一个rss阅读器应用程序,现在我需要在开始解析它(Windows-1251或utf-8)之前知道xml的编码是什么。这在 xml 声明标头中描述,即 <?xml version="1.0" encoding="UTF-8"?> .如何在解析之前获取此标头?我使用sax解析器的android.sax实现,并将编码作为字符串参数传递给InputStreamReader。 我发现了一个相关的问题:SAX 解析器无法识别 windows-1255 编码 - 但解决方案是将 cp-1251 转换为 utf-8,这太麻烦且对资源要求很高。我认为一定有更好的解决方案,因为我只需要从标头<?xml version="1.0" encoding="UTF-8"?>中知道编码值。但是我无法从 xml 获取此标头,解析器从 <rss> 标签开始。我应该如何获得它?

我建议切换到Android官方支持的xmlPullParser,编码支持问题应该会消失。

这是它的安卓文档。

不要掉以轻心,因为SAX解析器在Android v3.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)并在任何需要的字符集中使用它。

最新更新