2011-01-07 21 views
2

Ich rufe einen Rest WS auf, der XML zurückgibt. Einige Elemente haben Zeichenketten enthalten Sonderzeichen wie áãç etc ... Wenn ich die Informationen über den Browser erhalten, wird alles richtig angezeigt, aber wenn ich es von Android aus aufrufen, bekomme ich nicht die richtigen Sonderzeichen.UTF8 Codierung in Android beim Aufruf von REST-Webservice

Beachten Sie die ‚decodiert‘ und ‚codiert‘ Variablen:

wenn ich URLDecoder.decode(result, "UTF-8") Das Ergebnis bleibt gleich

verwenden, wenn ich URLEncoder.encode(result, "UTF-8") ändert sich das Ergebnis zu verwenden, was würde es (voll zu erwarten von% 's Symbolen und numerischen darstellenden Symbolen und Sonderzeichen).

Hier ist die Methode, um die Webservice zu nennen:

public void updateDatabaseFromWebservice(){ 

    // get data from webservice 
    Log.i(TAG, "Obtaining categories from webservice"); 

    HttpClient client = new DefaultHttpClient(); 
    HttpGet request = new HttpGet(ConnectionProperties.CATEGORIES_URI); 

    ResponseHandler<String> handler = new BasicResponseHandler(); 

    String result = ""; 
    String decoded; 
    String encoded; 
    try {     
     result = client.execute(request, handler); 

     decoded = URLDecoder.decode(result, "UTF-8"); 
     encoded = URLEncoder.encode(result, "UTF-8"); 
     String c = "AS"; 

    } catch (Exception e) { 
     Log.e(TAG, "An error occurred while obtaining categories", e); 
    } 

    client.getConnectionManager().shutdown(); 
} 

Jede mögliche Hilfe

Antwort

12

Verwenden Sie diese XML-Zeichenfolge zu erhalten, um den Server unter der Annahme codiert Daten in UTF-8:

HttpResponse response = client.execute(request); 
... // probably some other code to check for HTTP response status code 
HttpEntity responseEntity = response.getEntity(); 
String xml = EntityUtils.toString(responseEntity, HTTP.UTF_8); 
+0

für mich gearbeitet, danke! – baekacaek

2

Uh geschätzt. URLDecoder und Encoder dienen zum Codieren und Decodieren von URLs, nicht von XML-Inhalten. Es wird für die URL verwendet, die Sie bei Anfragen verwenden. Also Code ist nur ... falsch.

Aber noch größere Problem ist, dass Sie einen String nehmen, während Inhalt wirklich XML ist, die geparst werden muss. Und damit der Parser die richtige Decodierung von UTF-8 (und die Behandlung von Entitäten usw.) vornehmen kann, wäre es besser, ein byte [] aus der Anfrage zu bekommen und dieses an den Parser weiterzuleiten; obwohl http-Client zu tun, Decodierung zu tun, kann funktionieren ok (unter der Annahme, dass Service korrekt angibt Codierung verwendet; nicht alle tun - aber selbst wenn nicht, können XML-Parser es aus XML Deklaration herausfinden).

Also: entfernen Sie URLDecoder/URLEncoder Stuff, Parser XML und extrahieren Sie Daten aus XML.

Verwandte Themen