【问题标题】:SAX Parser encoding issue in German Language德语中的 SAX 解析器编码问题
【发布时间】:2012-05-30 17:46:40
【问题描述】:

我正在开发一款德语应用。我正在以 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 ---> können

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

gewährleisten --->gewährleisten

谁能建议解决这个问题的正确方法?

【问题讨论】:

    标签: android encoding android-parser


    【解决方案1】:

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

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

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

    【讨论】:

    • 您能否建议我在上面的 GermanParseActivity 类中应该在哪里使用这行代码...谢谢
    • 在您的System.out.println("This XML is ========&gt;"+XML); 行周围。其中输入和输出是变量 XML。
    • 非常感谢它对我有用......我一直在徘徊很长时间,有很多人在寻找同样的东西。你已经以一种很好的方式给出了最简单的答案..谢谢rekire..干杯!!
    【解决方案2】:

    here 得到我的答案 他们建议标题应该是:

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

    而不是

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

    希望这是答案-编辑刚刚看到您无法控制 xml, 所以这无济于事,rekire的答案是一个选择

    【讨论】:

    • 问题是文本是 UTF-8 但被解释为 ISO-8859-1。所以这无济于事
    • @rekire 是的,我在阅读整个问题后看到它已经编辑过。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-04-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-16
    • 2011-09-23
    • 1970-01-01
    相关资源
    最近更新 更多