2010-07-01 9 views
5

Używam parsera HTML o nazwie Jsoup, do ładowania i parsowania plików HTML. Problem polega na tym, że strona, którą skrobię, jest zakodowana w zestawie znaków ISO-8859-1, podczas gdy Android używa kodowania UTF-8 (?). Powoduje to pojawienie się niektórych znaków jako znaków zapytania.Jak przekonwertować ciąg znaków na kodowanie UTF-8 w systemie Android?

Więc teraz powinienem przekonwertować ciąg na format UTF-8.

Teraz znalazłem tę klasę o nazwie CharsetEncoder w pakiecie Android SDK, co może mi pomóc. Ale nie mogę wymyślić, jak go wdrożyć w praktyce, więc zastanawiam się, czy można uzyskać pomoc z praktycznym przykładem.

UPDATE: Kod do odczytu danych (Jsoup)

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

mógłbyś pisać kod używany do odczytania dokumentu HTML? – yanchenko

+0

OK, zaktualizowałem swój post. – droidgren

Odpowiedz

6

Możesz pozwolić Android wykonać pracę dla ciebie, czytając stronę do byte [], a następnie przy użyciu metod jSoup dla parsowania obiektów String.

Nie zapomnij podać kodowania podczas tworzenia łańcucha z danych odczytanych z serwera przy użyciu prawidłowego ciągu znaków constructor.

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 
Powiązane problemy