2012-05-24 91 views
0

我正在研究德語的應用程序。我以XML格式獲取數據。我使用SAX解析器來解析這些XML並在TextView中顯示數據。除了解析後得到的特殊字符問題以外,一切工作都正常。德語SAX解析器編碼問題

這是我通過URL鏈接獲得的XML。這個XML有utf-8編碼。這個XML文件中的所有字符都很好。

<?xml version="1.0" encoding="utf-8"?> 
<posts> 
    <page id="001"> 
     <title><![CDATA[Sie kaufen bei uns ausschließlich Holzkunst- und Volkskunst-Produkte ]]></title> 
     <detial><![CDATA[Durch enge Beziehungen mit unseren Lieferanten können wir attraktive rückläufig 
     Preise und schnelle Lieferungen gewährleisten. Caroline Féry and Laura Herbst Universität Potsdam Mein 
     Flugzeug hatte zwölf Stunden VERSPÄTUNG </p>]]></detial> 
    </page>  
</posts> 

我用SAX解析器解析這個XML: - (以及TextView顯示所分析的數據。)

public class GermanParseActivity extends Activity { 
    /** Called when the activity is first created. */ 

    static final String URL = "http://www.xyz.com/id=1"; 

    ItemList itemList; 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     XMLParser parser = new XMLParser(); 
     String XML = parser.getXmlFromUrl(URL); 

     System.out.println("This XML is ========>"+XML); 

     try 
     { 
      SAXParserFactory spf = SAXParserFactory.newInstance(); 
     SAXParser sp = spf.newSAXParser(); 
      XMLReader xr = sp.getXMLReader(); 

      /** Create handler to handle XML Tags (extends DefaultHandler) */ 
      MyXMLHandler myXMLHandler = new MyXMLHandler(); 
      xr.setContentHandler(myXMLHandler); 

     ByteArrayInputStream is = new ByteArrayInputStream(XML.getBytes()); 
     xr.parse(new InputSource(is)); 
     } 
     catch(Exception e) 
     { 

     } 

     itemList = MyXMLHandler.itemList; 

     ArrayList<String> listItem= itemList.getTitle(); 


    ListView lview = (ListView) findViewById(R.id.listview1); 
    myAdapter adapter = new myAdapter(this, listItem); 
    lview.setAdapter(adapter); 
    } 


} 

,但分析之後,我的奇怪的字符其不在XML文件但在解析XML文件後生成。

像這些字符:

解析

können後分析之前--->können

rückläufig--->rückläufig

gewährleisten--- >gewährleisten

任何人都可以請建議正確的方法來解決這個問題?

回答

4

您需要重新編碼輸入。問題是文本是UTF-8,但被解釋爲ISO-8859-1。這似乎是SAX的一個缺陷。

String output=new String(input.getBytes("8859_1"), "utf-8"); 

該行採用ISO-8859-1並將其轉換爲Java使用的utf-8。

+0

你可以請建議我在哪裏應該在我的abov中使用這行代碼e GermanParseActivity類...謝謝 – user755278

+0

圍繞你的'System.out.println(「This XML is ========>」+ XML);'line。輸入和輸出是變量XML。 – rekire

+0

非常感謝它爲我工作...我一直在漫遊很長一段時間,有很多人正在尋找同樣的事情。你已經給出了最簡單的答案,以一種很好的方式..謝謝你rekire ..乾杯!! – user755278

1

得到了我的anwser從here 他們建議的標題應該是:

<?xml version="1.0" encoding="ISO-8859-1"?> 

代替

<?xml version="1.0" encoding="utf-8"?> 

希望這是答案 - 編輯剛纔看到你就不用管了在xml中, 所以這不會幫助,rekire的答案然後是一個選項

+0

問題是文本是UTF-8,但被解釋爲ISO-8859-1。所以這不會幫助 – rekire

+0

@rekire是我看到它後,我已經編輯了整個問題。 – mariomario