3
내가 센차 터치, OpenLayers와 나는 GeoServer에서 WMS/WFS 데이터를 잡 오전를 사용하여 작은 테스트 페이지를 만들었습니다

.센차 터치, OpenLayers, GeoServer : 사용하는 장치에 잘못된 인코딩 안드로이드 2.2

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

내가 제공한다고 생각 : 나는 다음 문을 사용하여 내 GeoServer에서 일부 WFS의 데이터를 가져

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

:

나는 UTF-8로 내 HTML 페이지에 인코딩을 설정 한 내가 요청한 데이터를 UTF-8로 인코딩했다.

아이폰 4 (IOS 4)와 삼성 갤럭시 탭 10.1 (안드로이드 3.1)을 사용하면 잘 작동합니다.

내 문제는 : Android 2.2가 장착 된 기기를 사용하면 다른 인코딩으로 데이터가 다시 전송됩니다.

수신 할 것으로 예상되는 단어 중 하나는 Høj이지만 Høj (ANSI)을 수신합니다.

FireFox와 Chrome을 사용하여 GeoServer에서 응답을 디버깅하는 방법을 알고 있지만 휴대 전화 또는 태블릿을 디버깅하는 방법을 모르겠습니다.

왜 안드로이드 2.2에서 인코딩이 잘못 되었습니까?

업데이트 됨 :이 문제는 Android 2.2를 사용하는 기기와 관련이있는 것으로 보입니다. HTC Legend, Samsung Galaxy SII 및 Samsung Galaxy Tab 7이 문제를 안고 있습니다. Android 2.2를 모두 실행해야합니다.

답변

2

저는 GeoServer, openLayers 및 Android 브라우저 (Android 2.2)를 사용하여 정확히 동일한 문제에 직면했습니다.

나는 문제가있는 장소를 찾기 위해 조사를했다. 결국 나는 XMLHttpRequest.js로 갔다. 이 파일에서 openLayers는 XMLHttpRequest 객체를 생성하여 요청을하고 응답을 받는다. 나는 또한이 단계에서 이미 데이터가 인코딩 문제를 가지고 있다는 것을 발견했다.

내가 보내는 데이터가 올바른 인코딩 (utf-8)인지 확인하기 위해 wireshark를 사용하여 통신을 스니핑했습니다. 나는이 데이터를 버리고 그것이 올바른 utf-8 데이터라는 것을 알아 냈다. 그러나 재미있는 점은 iso-8859-1을 사용하여 utf-8 데이터를 표시하려고했을 때 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; 
}