SAX Parser编码在德语中的问题

时间:2012-05-24 06:46:24

标签: android encoding android-parser

我正在使用德语版的应用程序。我正在以XML格式获取数据。我使用SAX解析器来解析这些XML并在TextView中显示数据。除了解析后得到的特殊字符问题外,一切正常。

这是我通过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---&gt; können

     

rückläufig---&gt; rückläufig

     

gewährleisten---&gt; gewährleisten

有人可以建议解决此问题的正确方法吗?

2 个答案:

答案 0 :(得分:4)

您需要对输入进行重新编码。问题是文本是UTF-8,但被解释为ISO-8859-1。这似乎是SAX的一个错误。

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

该行采用ISO-8859-1并将其转换为Java使用的utf-8。

答案 1 :(得分:1)

here得到了我的anwser 他们建议标题应为:

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

而不是

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

希望这是答案 - 编辑只是看到你无法控制xml, 所以这没有用,rekire的答案就是一个选项

相关问题