我正在制作一个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 所以我在这里很黑。
答案 0 :(得分:0)
内容编码和字符编码不是一回事。
内容编码是指压缩,例如gzip。由于getContentEncoding()
为空,因此告诉您没有压缩。
您应该查看conn.getContentType()
,因为通常可以在content-type
响应标头中找到字符编码。
conn.getContentType()
可能会返回如下内容:
text/xml; charset=ISO-8859-1
所以你必须做一些解析。在“charset =”之后查找字符集名称,但要为指定mime类型但不是charset的情况做好准备。