Sencha Touch, OpenLayers, GeoServer: неправильное кодирование на устройствах с использованием Android 2.2 - PullRequest
3 голосов
/ 01 сентября 2011

Я создал небольшую тестовую страницу, используя Sencha Touch , OpenLayers , и я получаю данные WMS / WFS из GeoServer .

Я установил кодировку на своей HTML-странице в UTF-8:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

Я извлекаю некоторые данные WFS из моего GeoServer, используя следующую инструкцию:

var post = new OpenLayers.Request.POST({
    url: 'dataprovider.ashx',
    data: ...,
    headers: {
        "Content-Type": "text/xml;charset=utf-8"
    },
    callback: function (response) {
        ...
    },
});

Что, я считаю, должно дать мне запрошенные данные в кодировке UTF-8.

Используя iPhone 4 (IOS 4) и Samsung Galaxy Tab 10.1 (Android 3.1), он работает просто отлично.

Моя проблема: Используя устройство с Android 2.2, я возвращаю данные в другой кодировке.

Одно из слов, которое я ожидаю получить, - Høj, но я получаю Høj (ANSI).

Использование FireFox и Chrome Я знаю, как отлаживать ответ от GeoServer, но я не знаю, как отлаживать телефоны или планшеты.

Почему кодировка неправильная на Android 2.2?

ОБНОВЛЕНО : Кажется, проблема связана с устройствами, использующими Android 2.2. Проблема с HTC Legend, Samsung Galaxy SII и Samsung Galaxy Tab 7 - все работают под управлением Android 2.2.

1 Ответ

2 голосов
/ 02 марта 2012

Я столкнулся с точно такой же проблемой, используя GeoServer, openLayers и браузер Android (Android 2.2).

Я провел некоторое исследование в поисках места, где существует проблема. В общем, я пошел к XMLHttpRequest.js. В этом файле openLayers создает объект XMLHttpRequest, делая запрос и получая ответ. Я также обнаружил, что на этом этапе уже полученные данные имеют проблемы с кодированием.

Я также прослушал сообщение, используя wireshark, чтобы убедиться, что данные, которые я отправляю, находятся в правильной кодировке (utf-8). Я сбросил эти данные и выяснил, что это были правильные данные utf-8. Но что было интересно, когда я пытался отобразить мои данные utf-8 с помощью iso-8859-1, я получил точно такой же вывод, как в браузере Android.

Мой вывод: В веб-браузере Android 2.2 объект XMLHttpRequest всегда считывает данные в предположении кодировки iso-8859-1.

Мое решение: Вы должны исправить строку самостоятельно. Сначала вы должны составить карту, где вы должны запомнить, например, «» это «ø». А затем, изучая символ за символом, когда вы найдете последовательность «Ã», замените ее на «ø». Это пример кода:

goodString = "";
for( i = 0; i < wrongString.length; i++) {
    var w = wrongString.charCodeAt(i);
    var c = wrongString.charAt(i);
    if(w == "Ã".charCodeAt(0) {
        w2 = wrongString.charCodeAt(++i);
        if(w2 == "¸".charCodeAt(0))
            c = 'ø';
    }
    goodString += c;
}
...