본문 바로가기
IBM - old/WAS 문제&해결

Form submit 을 이용해서 post 방식으로 Ajax call 한 data 를 servlet 에서 추출 해 봤을 때 한글이 깨짐

by freeman98 2016. 5. 30.

1. WAS 버전 : WAS All

2. OS : All

3. Error 발생 시점 : Form submit 을 이용해서 post 방식으로 Ajax call 한 data 를 servlet 에서 추출 해 봤을 때 한글이 깨짐
    하단과 같은 IBM WAS 와 관련된 한글 encoding 옵션을 전부 넣어도, request.setCharacterEncoding("utf-8") 수행해도 동일 현상
       - client.encoding.overrride=UTF-8
       - file.encoding=UTF-8

     데이터 흐름: JSP(한글 입력(UTF-8)) --> form submit을 이용  AJAX를 통하여 xml data 전송 -->저장된 data 추출(한글 깨짐(UTF-8))

4. Error message :
    전체 data 중에서 한글 data 만 깨짐 (여러 가지 다른 character set 으로 encoding 해봐도 encoding 되지 않음)

5. 예상 이유 :
    Ajax 형태로 request 를 call 할 때 한글 data 는 URI encoding 되어서 보내져야지만 WAS 에서 문제 없이 한글 encoding 이 가능합니다.
   그런데, prototype.js 를 사용하는 ajax call 에서는 URI encoding 하지 않은 data 를 그냥 던져서 WAS 입장에서는 깨어진 한글이 들어 옮
   (다른 대부분의 Ajax framework(JQuery 같은) 에서는 해당 현상이 보고되지 않았음)
   (일반적인 Ajax framework 은 실제로 WAS 로 요청을 전송할 때 Post body 에 한글이 있으면 URI encoding 을 수행합니다.
    prototype.js 의 경우에는 parameter 에 있는 내용을 URI encoding 을 수행한 후 Post body 에 넣고 전송을 수행하는데
    그전에 1 byte 라도 Post body 에 내용을 넣으면 URI encoding 없이 그대로 Post body 를 전송하기 때문에 발생되는 현상)

6. 조치 방안 :
    Ajax call 을 post 로 보낼 때 postBody 에 해당 내용을 담아서 보내는데 Form.serialize()를 사용하거나
   이를 encodeURIComponent() 함수를 이용해서 URI encoding 을 수행하면 됨


http://www-01.ibm.com/support/knowledgecenter/SSAW57_8.5.5/com.ibm.websphere.nd.doc/ae/rweb_custom_props.html?lang=ko

com.ibm.ws.webcontainer.decodeParamViaReqEncoding 옵션으로도 해결가능합니다.

댓글