[JAVA/JSP] EUC-KR 시스템과 UTF-8 시스템 전송 시 한글깨짐

[JAVA/JSP] EUC-KR 시스템과 UTF-8 시스템 전송 시 한글깨짐

이제 EUC-KR을 사용하는 시스템이 많이 없어졌다곤 하지만, EUC-KR을 사용하는 시스템과 UTF-8을 사용하는 시스템 간의 한글 파라미터 전달 문제는 여전히 골치가 아프다.

■ EUC-KR 로 파라미터를 잘 받는지 (또는 UTF-8로 파라미터를 잘 받는지) 확인하는 가장 좋은 방법

스프링 컨트롤러 단에서 파라미터를 받든, 자바 서블릿 단에서 파라미터를 받든, jsp 페이지 상단에서 파라미터를 받든, 파라미터를 받는 페이지가 있을 것이다.

이때, 파라미터를 특정 인코딩으로 잘 받는지 확인하고 싶을 때가 있다.

WAS 차원에서 어떤 인코딩이 적용되어 있느냐를 확인하고 싶을 수도 있고, 특정 페이지의 인코딩만 확인하고 싶을 수도 있다.

어쨌든 핵심은 보내는 쪽의 인코딩이 확실해야 한다는 점이다.

보내는 쪽의 인코딩이 불확실 내지는 부정확하다면, 테스트를 하면 할수록 뭐가 뭔지 아무것도 알 수 없게 된다.

가장 좋은 방법은 순수 html 에서 submit을 쏘는 것이다.

jsp나 php는 결국 WAS 내지는 웹서버의 영향을 받고, 백엔드 단에서 자바로 server to server로 쏘는 행위는 더더욱 인코딩을 확신할 수 없다(보통 이 server to server 인코딩이 제일 문제가 되곤 한다).

WAS나 웹서버를 통하지 않고 웹 브라우저로 순수 html 파일을 열고 submit을 날려서 테스트해보자.

■ EUC-KR로 submit을 전송하는 html 코드 (euc-kr.html)

<html>

<head>

<meta charset=”euc-kr”>

<script>

window.onload = function() {

    document.charset = “euc-kr”;

}

</script>

</head>

<form id=”form1″ name=”form1″ method=”POST” action=”http://localhost:8080/action_test.jsp” target=”_blank”>

    param1 : <input type=”text” name=”param1″ value=””>

</form>

<br>

<input type=”button” onclick=”document.form1.submit()” value=”submit”>

</html>

■ UTF-8로 submit을 전송하는 html 코드 (utf-8.html)

<html>

<head>

<meta charset=”utf-8″>

<script>

window.onload = function() {

    document.charset = “utf-8”;

}

</script>

</head>

<form id=”form1″ name=”form1″ method=”POST” action=”http://localhost:8080/action_test.jsp” target=”_blank”>

    param1 : <input type=”text” name=”param1″ value=””>

</form>

<br>

<input type=”button” onclick=”document.form1.submit()” value=”submit”>

</html>

■ UTF-8 시스템에서 UTF-8 파라미터를 받는 코드

String param1 = request.getParameter(“param1”);

■ EUC-KR 시스템에서 EUC-KR 파라미터를 받는 코드

String param1 = request.getParameter(“param1”);

■ UTF-8 시스템에서 EUC-KR 파라미터를 받는 코드

<%@page language=”java” contentType=”text/xml; charset=utf-8″ pageEncoding=”utf-8″%>

<%

    response.setContentType(“text/xml; charset=utf-8”);

    request.setCharacterEncoding(“euc-kr”);


    String param1 = request.getParameter(“param1”);

    param1 = new String(param1.getBytes(“8859_1”), “euc-kr”);

    System.out.println(“param1 : ” + param1);

%>

■ EUC-KR 시스템에서 UTF-8 파라미터를 받는 자바코드

<%@page language=”java” contentType=”text/xml; charset=euc-kr” pageEncoding=”euc-kr”%>

<%

    response.setContentType(“text/xml; charset=utf-8”);

    request.setCharacterEncoding(“utf-8”);

    String param1 = request.getParameter(“param1”);

    System.out.println(“param1 : ” + param1);

%>

■ 동일하게 “한글”이라는 파라미터를 전달하는 경우

 

EUC-KR 은 “param1=%C7%D1%B1%DB” 이라고 전송됨.

UTF-8은 “param1=%ED%95%9C%EA%B8%80” 이라고 전송됨.