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");