ajax 한글 파라메타 처리
ajax를 사용하는데 있어 가장 큰 난관중 한가지가 한글 처리이다.

일반적으로 제시하는 한글 처리가 제대로 되지 않는다면 다음의 경우가 대안일 수 있다.

나의 경우 Struts 환경에서 해결한 방법이다.

ajax -> struts ...

struts는 /WEB-INF/web.xml 에 한글 필터링 처리가 되어있다.

즉, 한글 파라메타 값을 처리하기 위해 설정한 것이다.

이경우 별도의 처리없이 스트럿츠 내에서 한글 파라메타를 원활하게 사용할 수 있다.

하지만 이게 ajax와 궁합에 문제를 발생한다.

ajax는 UTF-8 로 인코딩하여 파라메타를 전송한다.

그런데 내가 사용하는 환경에선 EUC-KR로 인코딩하여 파라메타를 전송토록 설정되었다.

즉, ajax로 파라메타 전송시 UTF-8 -> EUC-KR 두 번의 인코딩이 발생되어 한글이 깨진다.

일반적으로 jsp에서는 이와 같은 문제가 없이,

ajax를 통해 파라메타 전송시 encodeURIComponent()를 사용하여 전송해 주면 된다.

예) encodeURIComponent(document.f.name.value)

수신하는 jsp 에서는,

request.setCharacterEncoding("utf-8"); //한글 깨짐 방지를 위해  utf-8 디코딩

이렇게 해주면 된다.

스트럿츠에서는 위의 방법이 통하지 않는다.(내가 사용중인 환경에서는...)

이를 해결하기 위해 ajax 부분에 uriEncode 함수를 만들어서 처리했다.

function uriEncode(data) {
    if(data != "") {
        var encdata = '';
        var datas = data.split('&');
       
        for(i=1;i<datas.length;i++) {
            var dataq = datas[i].split('=');
            encdata += '&'+encodeURIComponent(dataq[0])+'='+encodeURIComponent(dataq[1]);
        }
    } else {
        encdata = "";
    }
    return encdata;
}

그리고 스트럿츠 쪽에서는 디코딩해서 한글 깨짐을 방지할 수 있다.

URLDecoder.decode(addrForm.getTag_name(),"UTF-8");
by 이종화 | 2006/07/21 16:08 | HTML/SCRIPT | 트랙백 | 덧글(2)
트랙백 주소 : http://ingenuity.egloos.com/tb/2277719
☞ 내 이글루에 이 글과 관련된 글 쓰기 (트랙백 보내기) [도움말]
Commented by hakj1202 at 2006/10/25 09:34
구글에서 찾아서 여기까지 왔네요 ㅠ.ㅠ
스트럿츠에서 ajax 쓸려고 하는데 한글이 문제네요.
strTemp="한글" 이런식으로 폼에 넘어와야 하는데 위에 보여주신 uriEncode 함수를 써서 넘길때
폼안의 strTemp에는 아무값도 들어있질 않아요...어쩌면 좋을까요 ㅠ.ㅠ
저좀 도와주세요 흑흑
Commented by 이종화 at 2006/10/25 16:07
한가지 더 살펴보셔야 할게 있습니다.
사용하시는 WAS의 파라메터 케릭터 셋 설정을 확인해 보세요.
WAS가 한글 인코딩처리가 되었다면 이 글의 내용처럼 하시면 잘 됩니다.
하지만 잘 안된다면 WAS의 파라메터 케릭터 셋 설정을 euc-kr 로 설정하시던지 아님 java 프로그램 단에서 euc-kr 케릭터 셋을 선언해 주시면 되겠죠.
그밖에도 몇가지 더 시도해 볼만한 방법들이 있긴합니다만 가장 편한건 WAS를 제어하는 것이겠죠.
단 그로인해 기존의 환경에 영향을 줄 수 있다면 프로그램 단에서 해결을 보셔야 합니다.

:         :

:

비공개 덧글

< 이전페이지 다음페이지 >