如何使用utf-8编码解析来自服务的XML特殊字符

问题描述:

我想解析来自服务的“内容”类型的内容。如何使用utf-8编码解析来自服务的XML特殊字符

SAXParserFactory spf = SAXParserFactory.newInstance(); 
SAXParser sp = spf.newSAXParser(); 
XMLReader xr = sp.getXMLReader(); 
myXMLHandler = new XMLHandler(); 
xr.setContentHandler(myXMLHandler); 
URL _url = new URL(params[0]); 
xr.parse(new InputSource(_url.openStream())); 
+0

你更多地解释你的代码有什么问题?什么不工作?目前的结果是什么,预期的结果是什么? –

+0

我已经完成了从服务中解析字符串的工作,但它无法显示服务中存在的特殊字符。 [链接](http://182.160.161.2/~siva/turkish/web_serv/category.php?order_by=desc&category_id=2)。你可以指导我这样做。 – Jenefer

+0

我检查了你的链接,我用DOM解析器试了一下,它工作的很好,我也可以阅读那些土耳其文字,并在textview上显示它。 :) – TheLittleNaruto

我试过DOM Parser而不是XaxParser。检查下面的函数,并调用它内部的后台线程:

public String readXML(){ 
     StringBuilder stringBuilder = new StringBuilder(); 
     try { 
       URL _url = new URL("http://182.160.161.2/~siva/turkish/web_serv/category.php?order_by=desc&category_id=2"); 
       File fXmlFile = new File(new InputSource(_url.openStream()).getByteStream().toString()); 
       DocumentBuilderFactory dbFactory = DocumentBuilderFactory.newInstance(); 
       DocumentBuilder dBuilder = dbFactory.newDocumentBuilder(); 
       Document doc = dBuilder.parse(new InputSource(_url.openStream()).getByteStream()); 

       //optional, but recommended 
       //read this - http://stackoverflow.com/questions/13786607/normalization-in-dom-parsing-with-java-how-does-it-work 
       doc.getDocumentElement().normalize(); 

       System.out.println("Root element :" + doc.getDocumentElement().getNodeName()); 

       NodeList nList = doc.getElementsByTagName("document"); 

       Node nResp = nList.item(0); 
       Element fstElmnt = (Element) nResp; 
       NodeList nameList1 = fstElmnt.getElementsByTagName("response"); 

       Node mCat = nameList1.item(0); 
       Element catElmt = (Element) mCat; 

       NodeList catList = catElmt.getElementsByTagName("category"); 

       System.out.println("----------------------------"); 

       for (int temp = 0; temp < catList.getLength(); temp++) { 

        Node nNode = catList.item(temp); 

        System.out.println("\nCurrent Element :" + nNode.getNodeName()); 

        if (nNode.getNodeType() == Node.ELEMENT_NODE) { 

         Element eElement = (Element) nNode; 

         stringBuilder.append("Category ID : " + eElement.getElementsByTagName("category_name").item(0).getTextContent()+"\n"); 
         stringBuilder.append("Category Name : " + eElement.getElementsByTagName("category_id").item(0).getTextContent()); 
         System.out.println("Category ID : " + eElement.getElementsByTagName("category_name").item(0).getTextContent()); 
         System.out.println("Category Name : " + eElement.getElementsByTagName("category_id").item(0).getTextContent()); 


        } 
       } 
       } catch (Exception e) { 
       e.printStackTrace(); 
       } 
       return stringBuilder.toString(); 

    } 

这里是我的设备的屏幕截图,看看: 你可以看到那些土耳其语太:)

enter image description here

莫非
+0

我应该提到,在答案中,而不是调用getNodeValue(),我已经调用了getTextContent()。那完成了任务。 :) – TheLittleNaruto