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

В приложении для Android, которое я написал, есть часть, которая позволяет пользователю вводить начальное и конечное местоположение своей поездки, и маршрут маршрута возвращается. Я использую сервисы BEST 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 / но я все равно получаю те же результаты ...

1 Ответ

0 голосов
/ 12 октября 2011

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

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

edit

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

final String str = EntityUtils.toString(resEntity);

на

final String str = EntityUtils.toString(resEntity, HTTP.UTF_8);
...