2010-07-01 8 views
5

Ich verwende einen HTML-Parser namens Jsoup, um HTML-Dateien zu laden und zu analysieren. Das Problem ist, dass die Webseite, die ich scrapping ist in ISO-8859-1 Zeichensatz codiert, während Android UTF-8 Codierung (?) Verwendet. Dies führt dazu, dass einige Zeichen als Fragezeichen angezeigt werden.Wie konvertiere ich eine Zeichenfolge in UTF-8 in Android?

So jetzt denke ich, ich sollte die Zeichenfolge in UTF-8-Format konvertieren.

Jetzt habe ich diese Klasse namens CharsetEncoder im Android SDK gefunden, was ich denke, könnte mir helfen. Aber ich kann mir nicht vorstellen, wie ich es in der Praxis umsetzen soll, also frage ich mich, ob ich mit Hilfe eines praktischen Beispiels Hilfe bekommen könnte.

UPDATE: Code zum Lesen von Daten (Jsoup)

url = new URL("http://www.example.com"); 
Document doc = Jsoup.parse(url, 4000); 
+2

Könnten Sie den Code verwendet, senden Sie uns eine HTML-Dokument zu lesen? – yanchenko

+0

OK, ich habe meinen Beitrag aktualisiert. – droidgren

Antwort

6

Sie können Android lassen die Arbeit für Sie tun, indem Sie die Seite in ein byte [] zu lesen und dann die jSoup Methoden String-Objekte für die Analyse.

Vergessen Sie nicht, die Codierung anzugeben, wenn Sie die Zeichenfolge aus den vom Server gelesenen Daten mit dem richtigen String constructor erstellen.

4

Byte encodings and Strings

public static void main(String[] args) { 

     System.out.println(System.getProperty("file.encoding")); 
     String original = new String("A" + "\u00ea" + "\u00f1" 
           + "\u00fc" + "C"); 

     System.out.println("original = " + original); 
     System.out.println(); 

     try { 
      byte[] utf8Bytes = original.getBytes("UTF8"); 
      byte[] defaultBytes = original.getBytes(); 

      String roundTrip = new String(utf8Bytes, "UTF8"); 
      System.out.println("roundTrip = " + roundTrip); 

      System.out.println(); 
      printBytes(utf8Bytes, "utf8Bytes"); 
      System.out.println(); 
      printBytes(defaultBytes, "defaultBytes"); 
     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } 

    } // main