Character encoding Sencha Touch、OpenLayers、GeoServer:在使用Android 2.2的设备上编码错误

Character encoding Sencha Touch、OpenLayers、GeoServer:在使用Android 2.2的设备上编码错误,character-encoding,sencha-touch,openlayers,android-2.2-froyo,geoserver,Character Encoding,Sencha Touch,Openlayers,Android 2.2 Froyo,Geoserver,我已经使用Sencha Touch、OpenLayers创建了一个小的测试页面,我正在从一个地理服务器接收WMS/WFS数据 我已将HTML页面上的编码设置为UTF-8: <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 我相信这会给我所要求的数据编码为UTF-8 使用iPhone4(iOS4)和三星GalaxyTab10.1(安卓3.1),它运行得很好 我的问题是:使用安卓2.2设备,我以不

我已经使用Sencha Touch、OpenLayers创建了一个小的测试页面,我正在从一个地理服务器接收WMS/WFS数据

我已将HTML页面上的编码设置为UTF-8:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
我相信这会给我所要求的数据编码为UTF-8

使用iPhone4(iOS4)和三星GalaxyTab10.1(安卓3.1),它运行得很好

我的问题是:使用安卓2.2设备,我以不同的编码返回数据

我希望听到的一个词是
Høj
,但我听到的是
H¸j
(ANSI)

使用FireFox和Chrome,我知道如何调试来自GeoServer的响应,但我不知道如何调试手机或平板电脑

为什么Android 2.2上的编码错误?


更新:问题似乎与使用Android 2.2的设备有关。HTC Legend、三星Galaxy SII和三星Galaxy Tab 7都出现了问题,它们都在运行Android 2.2。

我在使用GeoServer、openLayers和Android浏览器(Android 2.2)时遇到了完全相同的问题

我做了一些研究,寻找问题存在的地方。总之,我转到了XMLHttpRequest.js。在这个文件中,openLayers正在创建XMLHttpRequest对象,发出请求并接收响应。我还发现在这个阶段已经收到的数据存在编码问题

我还使用wireshark嗅探通信,以确保我发送的数据编码正确(utf-8)。我转储了这些数据,发现它是正确的utf-8数据。 但有趣的是,当我尝试使用iso-8859-1显示我的utf-8数据时,我收到了与Android浏览器完全相同的输出

我的结论: 在android 2.2 web浏览器中,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;
}
goodString=”“;
for(i=0;i
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;
}