본문 바로가기
프로그래밍/JAVA

javascript encodeURIComponent 서버 전송 한글깨짐

by 애플 로그 2021. 11. 11.
반응형

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 object equals, String equals 는 뭐가 다를까?

JAVA object equals, String equals 는 뭐가 다를까? equals() 두 객체의 내용이 같은지 확인하는 Method 1. 객체를 비교해보자 public static void main(String args[]) { User user1 = new User("shlee",..

www.appletong.com

 

 

JAVA SHA 256 암호화 예제소스

SHA-256 는 무엇일까? Secure Hash Algorithm의 약자 이고, 1993년 미국 국가안보국에서 처음으로 설계했다고 한다. 해시의 결과가 256bit 이다. 즉 결과물로 암호화 결과물로 64자리 문자열을.

www.appletong.com

 

 

매우 쉬운 첨부파일 업로드 하기 JSP 예제

JSP 첨부파일 업로드 하기 쉬운 예제 서버에 첨부파일 업로드하는 간단한 예제를 만들어 봤습니다. 준비물 apache 에서 제공하는 Liblibrary 필요 보통 왠만한 was 구성시에는 기본으로 들어가는

www.appletong.com

 

 

자바스크립트 현재 날짜 시간 구하기 ( yyyyMMdd, yyyyMMddhhmmss )

자바스크립트 현재 날짜 시간 구하기 ( yyyyMMddhhmmss ) javascript를 통해 예제를 "년월일시분초"를 구하는 function example코드를 만들어 보겠습니다. 1. yyyyMMddhhmmss 형식의 string 데이터 반환 ( EX : 2..

www.appletong.com

댓글