본문 바로가기
웹개발/jsp

한글 깨짐 해결 방법

by heavenLake 2022. 2. 17.
반응형

 

 출처사이트

https://www.ince.co.kr/255

 

[java][javaScript] java와 javaScript 사이의 한글전송 깨짐현상 해결법

오랜만에 블로그 포스팅을 하게 되네요 ^^ 그간 이직 하고 하고 싶던 프로그래밍 원없이 했습니다. 이제좀 프로그래머로서의 삶을 다시 사는 느낌이네요. 이번 프로젝트 진행중에 발생한 문제를

www.ince.co.kr

 

DB -> java 데몬 -> javaScript 로 데이터를 전송하며 모두 UTF-8 로 처리했지만
어김없이 한글 깨짐 현상이 발생했습니다.

아마도 DB->java 데몬 으로 옮겨 오면서 UTF-8 처리가 제대로 되지 않은걸로 추측됩니다.



이문제에 대해서 해결한 방법을 아래에 적었습니다.

 java
 URLEncoder.encode("한글","UTF-8")
 URLDecoder.decode("한글","UTF-8")


java script
 function urldecode (str) { 
    return decodeURIComponent((str + '').replace(/\+/g, '%20'));  // 공백 문자인 + 를 처리하기 위해 +('%20') 을 공백으로 치환
  }

위와 같이  URL 엔코더와 디코더를 이용해서 문제를 해결했습니다.




URL 엔코더의 경우 주로 검색창에 한글로 검색했을 경우
검색된 페이지의 url을 보시면 "검색+한+글자" 와 같은 것을들 자주 볼수 있었을 텐데요.

URL로 엔코딩후 다시 디코딩을 하면 공백에 + 기호로 처리되어 위의
java Script 에서도 + 기호가 모두 들어간채로 디코딩 되었습니다.

그래서 위와 같은 함수를 만들었습니다.
핵심은 decodeURIComponent((str + '').replace(/\+/g, '%20'));  // 공백 문자인 + 를 처리하기 위해 +('%20') 을 공백으로 치환
이부분 입니다.

+를 만나면 그냥 공백으로 치환해 버리는거죠 '%20' <-- 요놈이 + 기호 입니다.

좀 불편하긴 하지만 한글이 깨지지 않고 다른 언어들 간에 전송을 할수 있는 방법으로는
이방법이 제일 안전하고 괜찮아 보입니다.


출처사이트

https://saem-ee.tistory.com/45

 

[JSP] get, post방식 데이터 전송시 한글 깨짐 해결

개발을 하다가 초보적인 실수로 한글이 깨져 당황할때가 있다. (나는야 초보개발자) 나중을 위해 한글인코딩 방법을 정리해두도록 한다. 먼저 설정을 통한 인코딩방법이 있다. 1. web.xml 파일에

saem-ee.tistory.com

 

 

 

1. web.xml 파일에서 인코딩 설정

 

1
2
3
4
5
6
7
8
      <filter>
        <filter-name>encodingFilter</filter-name>
        <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
        <init-param>
              <param-name>encoding</param-name>
              <param-value>UTF-8</param-value>
        </init-param>
      </filter>
cs

 

 

2. server.xml 파일에서 인코딩 설정

 

1
2
<Connector connectionTimeout="20000" port="8081" 
  protocol="HTTP/1.1" redirectPort="8443"  URIEncoding="UTF-8"/>
cs

 

 

 

이런식의 설정을 하고 실행시켜도 한글이 깨지는 경우가 있다.

get과 post방식을 통해 데이터를 넘겨줄때 많이 발생하는데, 그때 시도할 방법이 있다.

 

 

 

1. jsp페이지 request.setCharacterEncoding 명시(post방식)

 

1
2
3
4
5
6
7
8
9
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
 
<%@page import="java.util.*"%>
<%
 
    request.setCharacterEncoding("UTF-8");
 
%>
 
cs
 
2. form태그 accept-charset속성
 
1
<form method="post" accept-charset="utf-8">
cs
 
form 태그를 이용해 데이터를 보내는 경우, accept-charset속성을 이용해 데이터를 인코딩후 보낼 수 있다.
 
 
 
3. parameter값 보낼때 직접 인코딩(get방식)
 
 
1
2
3
4
5
function testEncoding(id, name){
 
 location.href="<c:url value='/test.do' />?
               id="+id+"&name="+encodeURI(name,"UTF-8");
}
cs

 

보내는 파라미터 값을 encodeURI(값,"UTF-8")을 통해 직접 인코딩시켜 보낼 수 있다.

 

 

 

나는 form accept-scharset을 통해 인코딩에 성공할 수 있었다 ! 다른방법들은 왜 안된건지 ㅜ

실제 운영을 할때에는 웬만하면 영어값을 사용하는 것이 좋다고 한다.

SERVER에서는 EUC-KR인데, ORACLE DB는 UTF-8일수도 있기 때문이다.

 

반응형

'웹개발 > jsp' 카테고리의 다른 글

jsp태그 및 <% 사용해서 개발하기  (0) 2022.02.17
ajax로 form data(multipart) 전송 하기  (0) 2022.02.17
ajax로 데이터 주고받기  (0) 2022.02.17
${} - EL 표현식 문법과 사용 방법  (0) 2022.02.17
EL과 JSTL  (0) 2021.07.23

댓글