프로그래밍/JSP

servlet 한글 깨짐과 쿼리스트링

_soyoung 2021. 12. 31. 20:25
반응형

웹서버 -> 웹 브라우저(클라이언트)로 데이터 보낼 때 한글이 깨지는 유형

1. ???

2. 궯뚧뺧꺓쓁

 

 

 

한글이 깨지는 이유

1번의 경우

: ???

웹서버에서 클라이언트(웹 브라우저)로 데이터를 보낼 때 기본 인코딩 방식은 ISO-8859-1(주로 유럽에서 사용)이다.

ISO-8859-1방식은 데이터를 1byte씩 나눠서 보낸다.

한글자당 2byte인 한글이 1byte로 나눠져서 보내지니 웹 브라우저에서 아예 무슨 문자인지 인식을 못하는 것이다.

 

해결

response.setCharacterEncoding("UTF-8");

웹 서버에서 웹 브라우저로 데이터를 보낼 때의 방식을 utf-8 방식(한번에 2byte씩 보냄)으로 설정한다.

 

 

2번의 경우

: 궯뚧뺧꺓쓁

서버에서 UTF-8 인코딩 방식으로 클라이언트에 잘 보냈지만 웹 브라우저에서 다른 코드로 인식하는 상황이다.

 

해결

response.setContentType("text/html; charset=UTF-8");

웹 브라우저에게 데이터를 받은 후 어떻게 해석해야 하는가를 알린다.

이 문서는 html 문서이고, character들은 UTF-8로 읽으라는 뜻이다.

 

그리고 위의 코드를 입력해주지 않으면 브라우저마다 웹문서를 자의적으로 해석하여 브라우저마다 결과물이 다를 수 있다.

예를 들어 internet explore은 읽어야할 문서 형식이 정해지지 않으면 기본값으로 html로 읽고, chrome은 기본값으로 text로 읽는다.

그래서 chrome에서 <br>을 출력하면 text로 인식해서 화면에 '<br>'그대로 나오고, internet explore에다 <br>을 치면 <br>이 줄바꿈으로 인식되어 화면에 출력되지 않는다.

 

 

 

웹 브라우저(클라이언트) -> 웹서버로 데이터가 보내질 때 한글깨지는 이유

대표적인 모양 : □□□

tomcat의 기본적인 인코딩 방식은 ISO-8859-1이다.

즉, 웹 브라우저에서 UTF-8방식으로 2byte씩 웹서버로 전달했는데 웹 서버에선 1바이트씩 해석하기 때문에 출력했을 때 한글이 깨지는 것이다.

 

해결

request.setCharacterEncoding("UTF-8");

클라이언트(웹 브라우저)에서 받아온 데이터를 utf-8로 읽어들이겠다는 뜻이다.

 

 

 

쿼리스트링

get 방식으로 데이터가 보내질 때 url에 보내지는 파라미터을 쿼리스트링이라 한다.

쿼리스트링(? 포함)

 

 

 

get 방식으로 온 데이터를 받는 방법

int id = Integer.parseInt(request.getParameter("id"));

id란 이름으로 온 값을 받아오고, 그 값을 int형으로 변환한다.

여기서 int형으로 변환해야하는 이유는 쿼리스트링은 무조건 문자열로 전달되기 때문이다.

 

쿼리스트링        값

?id=1               1

?id=                ""

?id                  null

?                    null

 

예외 처리

int id = 0;
String id_ = request.getParameter("id");
if (id_ != null && !id_.equals("")) {
    id = Integer.parseInt(request.getParameter("id"));
}

 

 

 

 

출처 : https://www.youtube.com/playlist?list=PLq8wAnVUcTFVOtENMsujSgtv2TOsMy8zd 변형 및 요약

반응형