3

Sencha TouchOpenLayersを使用して小さなテスト ページを作成し、 GeoServerから WMS/WFS データを受信して​​います。

HTML ページのエンコーディングを UTF-8 に設定しました。

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

次のステートメントを使用して、GeoServer から WFS データをプルします。

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 を搭載したデバイスを使用すると、別のエンコーディングでデータが返されます。

私が受け取ると予想される単語の 1 つは ですが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 を実行しています。

4

1 に答える 1

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;
}
于 2012-03-02T10:30:04.637 に答える