XMLPullParser带有特定字符的黑色菱形问号

时间:2015-06-22 19:48:15

标签: android xml character-encoding xmlpullparser

我正在制作一个Android应用程序,需要获取和解析XML。这个类是按照http://www.tutorialspoint.com/android/android_rss_reader.htm的说明进行的,并且fetcher方法如下所示:

public void fetchXML() {
    Thread thread = new Thread(new Runnable() {
        @Override
        public void run() {

            try {
                URL url = new URL(urlString);
                HttpURLConnection conn = (HttpURLConnection) url.openConnection();


                conn.setReadTimeout(10000 /* milliseconds */);
                conn.setConnectTimeout(15000 /* milliseconds */);
                conn.setRequestMethod("GET");
                conn.setDoInput(true);


                // Starts the query
                conn.connect();
                InputStream stream = conn.getInputStream();

                xmlFactoryObject = XmlPullParserFactory.newInstance();
                xmlFactoryObject.setValidating(false);
                xmlFactoryObject.setFeature(Xml.FEATURE_RELAXED, true);
                xmlFactoryObject.setNamespaceAware(true);

                XmlPullParser myparser = xmlFactoryObject.newPullParser();
                //myparser.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false);
                myparser.setInput(new InputStreamReader(stream, "UTF-8"));

                parseXMLAndStoreIt(myparser);
                stream.close();
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    });
    thread.start();
}

Parser看起来像教程中的那个,我的解析逻辑就在其中。

中可以看出
 myparser.setInput(new InputStreamReader(stream, "UTF-8"));

我正在使用UTF-8字符集。现在,当我在我的解析器中使用 getText()方法时,例如单词'Jõhvi',logcat输出为'J hvi' 。对于我的母语爱沙尼亚语的其他字符,它们也不是英文字母。我需要将此字符串用作键和用户界面,因此这是不可接受的。我认为这是一个字符集问题,但在XML网站上没有任何信息我正在使用

conn.getContentEncoding()

返回 null 所以我在这里很黑。

1 个答案:

答案 0 :(得分:0)

内容编码和字符编码不是一回事。

内容编码是指压缩,例如gzip。由于getContentEncoding()为空,因此告诉您没有压缩。

您应该查看conn.getContentType(),因为通常可以在content-type响应标头中找到字符编码。

conn.getContentType()可能会返回如下内容:

text/xml; charset=ISO-8859-1

所以你必须做一些解析。在“charset =”之后查找字符集名称,但要为指定mime类型但不是charset的情况做好准备。