【发布时间】:2015-07-23 18:02:37
【问题描述】:
我正在制作一个需要获取和解析 XML 的 Android 应用程序。该类是按照此处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();
}
解析器看起来像教程中的解析器,其中包含我的解析逻辑。
如你所见
myparser.setInput(new InputStreamReader(stream, "UTF-8"));
我使用的是 UTF-8 字符集。现在,当我在解析器中使用 getText() 方法时,例如在单词“Jõhvi”上,logcat 输出为“J�hvi”。我的母语爱沙尼亚语的其他字符也是如此,它们不在英文字母表中。我需要将此字符串用作键并在用户界面中使用,因此这是不可接受的。我认为这是一个字符集问题,但在我从中提取和使用的 XML 站点上没有任何信息
conn.getContentEncoding()
返回 null 所以我在这里一无所知。
【问题讨论】:
标签: android xml character-encoding xmlpullparser