ListView解析波斯语,希腊语,阿拉伯语或UTF-8 xml

时间:2012-09-30 09:39:47

标签: android listview xml-parsing

我使用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;
}

3 个答案:

答案 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 对象传递给文档对象

谢谢