JAVA/JAVA&JSP

[펌]UTF-8 처리

saltdoll 2008. 2. 1. 10:53
반응형

UTF-8 처리를 하는게 장난이 아니군..ㅡㅡ;
여기저기 보면서 다양한 케이스마다 UTF-8 처리를 하는 다양한 방법을 모았습니다. (워낙 다양한 곳을 보다보니 출처 정리조차 힘듬을 이해해주시길.. 뭐 그대로 복사한건 아니니까..ㅋ)
UTF-8 처리를 위해 아래를 모두 해야 하는건 아니고 맘에 드는 걸 고르면 되겠습니다..^^;

[Tomcat의 URI값을 UTF-8로 변경 설정]




1. export LANG=ko 또는 export LANG=ko_KR 와 같은 환경 설정
서버의 쉘을 설정하는 부분인데 LANG=UTF-8로 해야하나 이건 다른 프로그램에 영향을 줄 수 있기 때문에 가능한 안하는게 좋음..ㅋ

2. 서블릿 엔진의 file.encoding 값이 UTF-8, EUC_KR, KSC5601 중 하나가 되도록 함
서버 시작 스크립트에서 "java ... -Dfile.encoding=UTF-8 ..." 라고 지정
톰켓의 경우 catalina.sh(또는 bat)에 4군데 정도 있음

3. 서블릿에서 다음과 같은 request, response 인코딩 지정
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");

request.setContentType("text/html");
response.setContentType("text/html");

4. JSP 첫째줄에 다음 라인 추가
<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

5. GET 방식에서는 URL 인코딩 수행 (이것이 RFC 표준에 따르는 것이라고 함)
자바스크립트에서는 encodeURIComponent()
자바에서는 java.net.URLEncoder의 encode() //-->  java.netURLEncoder("문자열","UTF-8")

자바스크립트의 경우 다음 사이트 참고 http://mwultong.blogspot.com/2006/05/javascript-tools-decodeencode-uri.html

6. UTF-8 변환 함수 호출
public static String Kor2UTF8(String str) {
  if (str== null) {
    return null;
  }
  try {
    return new String(str.getBytes("8859_1"), "UTF-8");
  } catch (Exception e) {}
}

7. UTF-8로 파일 저장
울트라에디트 : 파일 -> 변환 -> ASCII를 UTF-8으로 (Unicode 편집)
에디트플러스 : 파일 -> 새이름으로 -> 인코딩을 UTF-8로 지정 또는
                     문서 -> 인코딩 변경 로드 -> 인코딩 선택을 UTF-8로 지정
이클립스 : Windows->General->Workspace 에서 Text file encoding을 UTF-8로 지정 또는 파일을 선택하고 오른쪽 버튼 클릭->Properties에서 Text file encoding을 UTF-8로 지정
이 때 한글이 깨지는 경우가 있음.  백업을 받아놓아야 함

서버에 올릴때는 바이너리로 올림

8. native2ascii -encoding UTF-8 test.xml test.xml
native2ascii는 자바에 내장된 명령어로 위와 같이 하면 test.xml 파일을 UTF-8로 인코딩해줌
단, 한글은 \u001 ... 이런식으로 깨짐
따라서 에디터로 열어서 수정해주어야 함

9. HttpURLConnection을 이용한 HTTP 통신
BufferedReader br = new BufferedReader(new InputStreamReader(con.getInputStream(), "UTF-8"));

10. 웹로직에서 UTF-8 처리
web.xml 에서 다음 추가
<web-app>
...
  <context-param>
    <param-name>weblogic.httpd.inputCharset./*</param-name>
    <param-value>UTF-8</param-value>
  </context-param>
...
</web-app>

weblogic.xml 에서 다음 추가
<weblogic-web-app>
...
  <jsp-descriptor>
    <jsp-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </jsp-param>
  </jsp-descriptor>
...
  <charset-params>
    <input-charset>
      <resource-path>/*</resource-path>
      <java-charset-name>UTF-8</java-charset-name>
    </input-charset>
  </charset-params>
...
</weblogic-web-app>

11. 톰켓에서 UTF-8 처리
web.xml 에서 다음 추가하고 첨부 파일을 %CATALINA_HOME%/common/classes/filters 복사하면 된다고 함..ㅎㅎ
<web-app>
...
  <filter>
    <filter-name>Set Character Encoding</filter-name>
    <filter-class>filters.SetCharacterEncodingFilter</filter-class>
    <init-param>
      <param-name>encoding</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
 
  <filter-mapping>
    <filter-name>Set Character Encoding</filter-name>
    <url-pattern>/*</url-pattern>
  </filter-mapping>
...
</web-app>







server.xml에서 다음과 같이 URIEncoding 추가
<Connector port="8080" maxHttpHeaderSize="8192"
    maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
    enableLookups="false" redirectPort="8443" acceptCount="100"
    connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8" />

12. 인코딩 테스트 jsp 참고 (이원영씨 글부분) http://www.javaservice.net/~java/bbs/read.cgi?m=resource&b=servlet&c=r_p&n=1092754975&k=hangul.jsp&d=tb#1092754975


출처 : http://skkim.tistory.com/entry/UTF-8-%EC%B2%98%EB%A6%AC



반응형
도움이 되셨다면 하트모양의 "♡ 공감"을 눌러주시면 큰 격려가 됩니다.
(로그인하지 않으셔도 가능)