1. 모든 문서는 UTF-8 인코딩으로 저장되어야 합니다.
에디트 플러스의 경우 도구 -> 기본설정 -> 파일 부분에서 새 파일 형식을
UTF-8 로 해놓음으로써 새파일 작성시 UTF-8을 기본으로 작성할수 있고,
이미 다른 인코딩 타입에서 작성된 문서인 경우 내용을 모조리 Ctrl+C로 복사후
문서 -> 인코딩 변경 로드에서 UTF-8로 변경후 다시 붙여넣기 하면 됩니다.
이클립스의 경우 Package Explorer 에서 프로젝트에서 우측 버튼을 누른 후
Properties->Info->Text file encoding->Other 을 UTF-8 로 잡아주면 됩니다.
( 기존 다른 인코딩 타입에서 작성된 문서 내부 한글은 모조리 깨지게 됨 )
* ascii 로 작성된 자바스크립트 파일을 utf 문서에서 불러와 수행시킬 경우
자바스크립트 에러 나는 문제도 있더군요.(한글 주석이 영향을 줬을수도...)
2. jsp 파일 상단에는 다음과 같은 방식으로 UTF-8 설정합니다.
<%@ page contentType = "text/html;charset=utf-8" %>
3. 서블릿은 다음과 같은 방식으로 UTF-8을 설정합니다.
request.setCharacterEncoding("utf-8")
4. 자바스크립트에서 encodeURIComponent 처리 및 톰캣 server.xml 의 설정 변경
위 1,2,3번의 방식으로 하면 post 방식의 데이터는 잘 받지만
get 방식의 데이터는 한글이 깨집니다.
이와 같은 경우 자바스크립트의 encodeURIComponent 함수와
server.xml 을 이용하여 처리하면 됩니다.
4.1 server.xml
톰캣 폴더의 conf 폴더에는 server.xml 파일이 존재합니다.
에디터로 열어보면
예)
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" />
값이 약간 틀릴수 있지만 초기 셋팅 값이 보통 저러하고,
Connector 은 초기에 2개가 있는데 8080 포트 부분을 수정하면 됩니다.
수정하는 방법은
URIEncoding="UTF-8" 을 추가하면 됩니다.
예)
<Connector port="8080" maxHttpHeaderSize="8192"
maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf-8" />
위와 같이 했다고 해결되는 것은 아닙니다. get 방식으로 데이터를 전송하면
자바 파일에서 확인 했을 경우 물음표 값만 넘어옵니다.
get 방식으로 보낼 경우 자바스크립트로 변환을 해줍니다.
예를 들어 "한글"을 자바스크립트에서
<SCRIPT>alert!( encodeURIComponent("한글") )</SCRIPT>
처럼 encodeURIComponent 함수로 변환하게 되면 %ED%95%9C%EA%B8%80 으로
변환됩니다. 이 값을 주소에 "한글" 대신에 넣게 되면 자바에서 알아서 잘~ 받습니다 ^^
5. HttpURLConnection 을 통하여 UTF-8 로 된 URL 을 읽을 경우.
다른 부분은 동일하고,
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
로 변경합니다.
6. jsp -> bean 데이터 전송은 문제 없지만 jsp -> jsp 에서 한글이 깨진다면
받는 부분에서
String test = request.getParameter("test ");
test = new String(test .getBytes("8859_1"), "UTF-8");
처럼 변환해서 저장합니다.
server.xml파일의 URIEncoding속성을 "utf-8"과 "euc-kr" 두가지로 jsp파일로만 테스트한 결과
모든 페이지의 상단에
<%@ page contentType = "text/html;charset=utf-8" %>
//서블릿은 다음과 같은 방식으로 UTF-8을 설정합니다.
//request.setCharacterEncoding("utf-8")
로 설정되어지면 되고
encodeURIComponent()를 사용하지 않아도 된다.
단. get방식으로 들어왔을경우는 new String(test .getBytes("8859_1"), "UTF-8"); 를 사용하여 변환하여 하며
get인지 post로 왔는지 체크는 request.getMethod()함수를 사용하여 알 수 있다.
server.xml파일에서 URIEncoding속성을 변경하여 줄 필요성은 없는듯하다
<FORM method="get" action="test.jsp">
get <input type="text" name="test" size="20">
<input type="submit">
</form>
<FORM method="post" action="test.jsp">
post <input type="text" name="test" size="20">
<input type="submit">
</form>
//test.jsp
<%@ page contentType = "text/html;charset=utf-8" %>
<% request.setCharacterEncoding("utf-8");%>
<%=request.getMethod()%>
<%
String test = request.getParameter("test");
if(request.getMethod().equals("GET"))
test = new String(test .getBytes("8859_1"), "UTF-8");
String method = request.getParameter("method");
%>
<%=test%>
'IT만들기 > Java' 카테고리의 다른 글
C#, C, C++ 프로그램 언어의 차이점 (0) | 2021.07.22 |
---|---|
자바는 무엇이며 왜 필요합니까? (0) | 2018.10.12 |
[Java Exception] 자바 에러 목록 및 ERROR 처리 (0) | 2017.11.08 |
jsp 에러페이지 만들기 (0) | 2017.07.10 |
한글 길이 자바스크립트 UTF-8 byte 길이 구하기 (0) | 2017.06.25 |
jsp 반영 안될 때 (0) | 2017.06.17 |
자바 제네릭스 (0) | 2017.06.17 |
JEUS에서 지원하는 Specification (0) | 2017.06.10 |
댓글