我使用tutorial关于listview解析来自互联网的xm并使用LasyAdapter显示listview中的项目。当我在xml中添加波斯字符(进入一个子节点)时,结果是listview中的一些框(在listview中显示文本之后)。 xml的格式也是UTF-8。我也使用了字体(但没有用)。此外,当我将Pwesian键入应用程序时,它显示正常,但它无法显示从xml解析的Persiann内容。提前致谢。我使用原始XMLparser更新了帖子(这是问题)。
public String getXmlFromUrl(String url) {
String xml = null;
try {
// defaultHttpClient
DefaultHttpClient httpClient = new DefaultHttpClient();
HttpPost httpPost = new HttpPost(url);
HttpResponse httpResponse = httpClient.execute(httpPost);
HttpEntity httpEntity = httpResponse.getEntity();
xml = EntityUtils.toString(httpEntity);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (ClientProtocolException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// return XML
return xml;
}
public Document getDomElement(String xml) {
Document doc = null;
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
try {
DocumentBuilder db = dbf.newDocumentBuilder();
InputSource is = new InputSource();
is.setCharacterStream(new StringReader(xml));
doc = db.parse(is);
} catch (ParserConfigurationException e) {
Log.e("Error: ", e.getMessage());
return null;
} catch (SAXException e) {
Log.e("Error: ", e.getMessage());
return null;
} catch (IOException e) {
Log.e("Error: ", e.getMessage());
return null;
}
return doc;
}
答案 0 :(得分:2)
我能找到答案。感谢@Serdak。他让我想起了读者。在getXMLFromUrl部分我应该更改:
xml = EntityUtils.toString(httpEntity);
到xml = EntityUtils.toString(httpEntity, "UTF-8");
和在getDomElement部分我应该更改:
InputSource is = new InputSource(); is.setCharacterStream(new StringReader(xml));
到InputSource is = new InputSource(new ByteArrayInputStream(xml.getBytes("UTF-8")));
请注意,“url”和“xml”都是主要活动调用的字符串,用于XMLparser.jave(包含getXmlFromUrl()和getDomElement())。
这些命令在主要活动中:
XMLParser parser = new XMLParser();
String xml = parser.getXmlFromUrl(URL)
;Document doc = parser.getDomElement(xml);
最好的问候。
答案 1 :(得分:0)
用于读取Xml值的阅读器可能未设置为UTF-8,这就是导致编码问题的原因。
尝试使用具有此类编码选项的阅读器。
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream(), "UTF-8"));
答案 2 :(得分:0)
当XML字符串包含 Unicode 字符(如波斯语字母)时, StringReader 对象会出现异常。因此,请直接将 InputStream 对象传递给文档对象
谢谢