Кодировка UTF8 в Android при вызове веб-службы REST - PullRequest
2 голосов
/ 07 января 2011

Я вызываю остальную часть WS, которая возвращает XML.В некоторых элементах есть строки, содержащие специальные символы, такие как áãç и т. Д. ... Когда я получаю информацию через браузер, она отображается правильно, но при вызове из Android я не получаю правильные специальные символы.

Обратите внимание на«декодированные» и «закодированные» переменные:

, когда я использую URLDecoder.decode(result, "UTF-8") Результат остается тем же

, когда я использую URLEncoder.encode(result, "UTF-8") Результат меняется на то, что ожидалось (полныйСимволы% и цифры, представляющие символы и специальные символы).

Вот метод для вызова веб-службы:

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();
}

Любая помощь будет оценена

Ответы [ 2 ]

12 голосов
/ 08 января 2011

Используйте это, чтобы получить строку XML, предполагая, что сервер кодирует данные в 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);
2 голосов
/ 07 января 2011

Э. URLDecoder и кодировщик предназначены для кодирования и декодирования URL, а не содержимого XML. Он используется для URL, который вы используете при создании запросов. Так что код просто ... неправильный.

Но еще большая проблема заключается в том, что вы берете строку, тогда как контент на самом деле представляет собой XML, который необходимо проанализировать. А чтобы синтаксический анализатор мог правильно декодировать UTF-8 (и обрабатывать сущности и т. Д.), Вам лучше получить байт [] из запроса, передав его парсеру; хотя запрос http-клиента на декодирование может работать нормально (при условии, что служба правильно указывает используемую кодировку; не все это делают - но даже если нет, анализаторы XML могут выяснить это из объявления xml).

Итак: удалите содержимое URLDecoder / URLEncoder, проанализируйте XML и извлеките нужные данные из XML.

...