Службы Bing Maps REST возвращают неправильные символы для французского языка. Есть ли способ попросить их закодировать свой ответ или как-то декодировать его?

В приложении для Android, которое я написал, есть часть, которая позволяет пользователю ввести начальное и конечное местоположение своей поездки, и возвращается маршрут маршрута. Для этого я использую службы Bing Maps REST. Я хочу, чтобы направления были на французском языке.

Пример запроса: запрос. Лучше всего это видно в браузере Chrome, Safari и Firefox позаботятся об этом. Вы можете видеть, что в направлениях есть много странных символов там, где их быть не должно. Я попытался декодировать на устройстве, выполнив:

URLDecoder.decode(obj.optString("text"), HTTP.ISO_8859_1)

который не работает (ответ остается прежним), что, я думаю, имеет смысл, поскольку он уже стал специальными символами. Я не могу использовать Windows-1252 для декодирования, потому что Android, похоже, не поддерживает это.

Пример того, что мне возвращают: Léger Encombrement. Каким он должен быть: Léger Encombrement.

Он также отлично работает на iPhone, но не на Android. Любые предложения о том, как я могу решить эту проблему?

Мой код в классе подключения:

public static JSONObject getJSONResult(final String url) {

    try {
        final HttpClient client = new DefaultHttpClient();
        final HttpGet get = new HttpGet(url);
        final HttpResponse responsePost = client.execute(get);
        final HttpEntity resEntity = responsePost.getEntity();

        boolean DEBUG = true;
        if (DEBUG) {
            Log.d("", "[JSON-ENV] url:  " + url);
        }

        final String str = EntityUtils.toString(resEntity);
        Log.d("connection", "response str: " + str);

        if (resEntity != null) {
            final JSONObject obj = new JSONObject(str);
            Log.d("connection", "JSON RESPONSE IS " + obj);
            return obj;

        } else {
            return null;
        }

    } catch (Exception e) {
        e.printStackTrace();
        return null;
    }

}

Есть ли что-то, что мне нужно добавить в мой класс подключения?

ОБНОВИТЬ:

Я добавил код синтаксического анализа JSON в формат «ISO_8859_1», как показано по этой ссылке: http://p-xr.com/android-tutorial-how-to-parse-read-json-data-into-a-android-listview/ но я все равно получаю те же результаты...


person digerati32    schedule 12.10.2011    source источник


Ответы (1)


Это JSON. Вам не нужно использовать URLDecoder. Ошибка до этого, возможно, когда вы создаете строку для парсера JSON. JSON всегда в UTF-8 (или 16, редко)

Можете ли вы опубликовать код для чтения ответа сервера?

редактировать

EntityUtils использует ISO_8859_1 в качестве набора символов по умолчанию, если не находит его в содержимом. Просто измените

final String str = EntityUtils.toString(resEntity);

to

final String str = EntityUtils.toString(resEntity, HTTP.UTF_8);
person njzk2    schedule 12.10.2011