javascript encodeURIComponent 서버 전송 한글 깨짐
javascript에서 encodeURIComponent를 사용하여 서버로 전송 시에 계속 한글이 깨질 때 참고하면 좋다.
나 같은 경우에도 한참이나 애를 먹었고, 해결하였으나 왜 해결되었는지 이해가 안 갔는데,
지금 블로그를 통해서 정리해보려고 한다.
encode, decode 방법
먼저 기본적인 encode와 decode 방법에 대해 확인해 보자.
1. 자바스크립트 - > 자바스크립트
[encode] - script
var str = '한글';
str = encodeURIComponent(str);
[decode] - script
var decodeStr = decodeURIComponent(str);
2. 자바스크립트 -> JAVA (자바)
[encode] - script
var str = '한글';
str = encodeURIComponent(str);
[decode] - JAVA
URLDecoder.decode(받은값, "UTF-8")
위 코드를 통해서 알 수 있는 점
encodeURIComponent는 UTF-8로 인코드 한다.
javascript 에서는 str = encodeURIComponent(str);
java에서는 URL Decoder.decode(받은 값, "UTF-8")
문자열이 깨지는 원인
지금의 경우는 javascript 에서 encodeURIComponent를 해서 보내지만 java 서버단에서 죽어라 안풀리는 케이스 이다.
한글이 깨지는 원인이 다양하게 있지만, 내 블로그를 찾아 보면서 이미 다른 블로그를 많이 참조 했을 것이다.
server.xml 의 URIEncoding을 변경 하라는 글도 많이 있다.
그렇지만 내가 서버관리자가 아니라서 변경을 못한다면 어떻게 해야하는것일까?
일반적인 케이스는 사실 was 설정 파일조차도 확인 못하는 경우가 대부분이다.
< tomcat server.xml >
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="18443"
URIEncoding="utf-8" />
그렇다. was Character 설정이 MS949, EUC-KR 일 경우, 내가 해당 서버에 대한 수정 권한이 없으면 사실 캐릭터 설정을 변경할수도 없는 노릇이다. 불행하게도 자바스크립트 에서는 MS949 인코드를 지원하지 않는다.
이럴때 어떻게 해야 하는것일까??
( javascript UTF-8인코드 -> java 서버 MS949 디코드)
해결 방법은??
두번 encodeURIComponent 해서 보내면 된다.
한글이 포함되지 않고 특수문자와 숫자로만 이루어 진경우에는 WAS에서 MS949로 decode를 해도 된다.
1. 한번 인코드
str = encodeURIComponent('한글');
%ED%95%9C%EA%B8%80
2. 두번 인코드 값
encodeURIComponent(encodeURIComponent('한글'));
%25ED%2595%259C%25EA%25B8%2580
WAS 셋캐릭터 설정이 MS949인 서버에서 UTF-8로 인코드 된 2번을 서버로 던져서 디코드 한 경우에도
한글이 없고 (숫자+영문+% 인경우 에는) MS949로도 %ED%95%9C%EA%B8%80 디코드가 가능하다.
이미 서버 설정 (URIEncoding="MS949") 인 상황이라면, 받을때 MS949로 한번 decode가 되어있다.
결국 받아서 UTF-8로 한번만 디코드 해서 사용하면 된다.
즉 정리 하자면 이렇다.
1. javascript에서 encodeURIComponent를 두번 해서 보낸다.
2. java 서버단에서는 UTF-8로 한번 디코드 해주면 된다.
Decoder.decode( request.getParameter("str"), "UTF-8" );
JAVA 관련 재밌는 글 더보기
'프로그래밍 > JAVA' 카테고리의 다른 글
모든 파라미터를 받아 그대로 POST submit 하는 JSP 페이지 (0) | 2022.05.31 |
---|---|
JAVA REST API 호출, oauth2 연동, example code (0) | 2022.02.18 |
프로메테우스 그라파나 자바 어플리케이션 (3) 모니터링 화면 (5) | 2021.11.01 |
프로메테우스 그라파나 자바 어플리케이션 모니터링 (2) jmx_exporter (0) | 2021.11.01 |
프로메테우스 그라파나 자바 어플리케이션 모니터링 (1) tomcat 설치 (0) | 2021.11.01 |
댓글