2012-05-24 2 views
0

Я работаю над приложением, которое находится на немецком языке. Я получаю данные в форме XML. Я использовал парсер SAX для анализа этих XML-данных и отображения данных в TextView. Все работает отлично, за исключением специальных символов, которые я получил после разбора.Проблема с кодировкой парсера SAX на немецком языке

Это мой XML, который я получил через ссылку URL. Этот 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 и преобразует его в UTF-8, который используется Java.

+0

вы можете предложить мне, где я должен использовать эту строку кода в своих abov e GermanParseActivity class ... Спасибо – user755278

+0

Вокруг вашего 'System.out.println (« Этот XML = =========>> + 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

Смежные вопросы