WEB 중국어 난 코드 해결 적용 (다양한 방법)

tomcat 를 사용 할 때 모두 가 중국어 난 장 판 에 부 딪 혔 다 고 믿 습 니 다. 구체 적 으로 표 시 를 통 해 얻 은 중국어 데 이 터 를 난 장 판 으로 표현 합 니 다.
1. 초급 해결 방법
한 번 의 검색 을 통 해 많은 사람들 이 다음 과 같은 방법 을 채택 했다. 먼저 얻 은 문자열 을 iso 8859 - 1 에 따라 디 코딩 변환 한 다음 에 gb 2312 에 따라 인 코딩 을 한 다음 에 정확 한 내용 을 얻 었 다.예제 코드 는 다음 과 같다.
String para = new String( request.getParameter("para").getBytes("iso8859-1"), "gb2312");
구체 적 인 이 유 는 미국인 들 이 tomcat 를 쓸 때 기본적으로 iso 8859 - 1 을 사용 하여 인 코딩 을 하기 때문이다.
그러나, 우리 의 servlet 과 jsp 페이지 에 대량의 매개 변 수 를 전달 해 야 합 니 다. 이렇게 전환 하면 대량의 변환 코드 를 가 져 올 수 있 고 매우 불편 합 니 다.
2. 입문 급 해결 방법
나중에 필 터 를 쓰기 시 작 했 습 니 다. 클 라 이언 트 가 보 낸 인 자 를 얻 기 전에 필 터 를 통 해 먼저 얻 은 매개 변수 인 코딩 을 gb 2312 로 설정 한 다음 에 getParameter 를 사용 하여 정확 한 인 자 를 얻 을 수 있 습 니 다.이 필 터 는 tomcat 의 예제 코드 jsp - examples 에서 상세 한 사용 예제 가 있 습 니 다. 그 중에서 필 터 는 웹. xml 에서 다음 과 같이 설정 되 어 있 습 니 다. 예제 에서 사용 하 는 것 은 일본어 인 코딩 입 니 다. 저 희 는 gb 2312 로 수정 하면 됩 니 다.
     <filter>
         <filter-name>Set Character Encoding</filter-name>
         <filter-class>filters.SetCharacterEncodingFilter</filter-class>
         <init-param>
             <param-name>encoding</param-name>
             <param-value>EUC_JP</param-value>
         </init-param>
     </filter>

필터 의 코드 는 다음 과 같 습 니 다.
public class SetCharacterEncodingFilter implements Filter {
     //       
     protected String encoding = null;
    //       
     protected FilterConfig filterConfig = null;
    //           
     protected boolean ignore = true;
    //      
     public void destroy() {
         this.encoding = null;
         this.filterConfig = null;
     }
    //     
     public void doFilter(ServletRequest request, ServletResponse response,
                          FilterChain chain)
           throws IOException, ServletException {
         //        ,        ,             
         if (ignore || (request.getCharacterEncoding() == null)) {
             String encoding = selectEncoding(request);
             if (encoding != null)
                 request.setCharacterEncoding(encoding);
         }
         //          
         chain.doFilter(request, response);
     }
     //       
     public void init(FilterConfig filterConfig) throws ServletException {
         this.filterConfig = filterConfig;
         this.encoding = filterConfig.getInitParameter("encoding");
         String value = filterConfig.getInitParameter("ignore");
         if (value == null)
             this.ignore = true;
         else if (value.equalsIgnoreCase("true"))
             this.ignore = true;
         else if (value.equalsIgnoreCase("yes"))
             this.ignore = true;
         else
             this.ignore = false;
     }
     //           
     protected String selectEncoding(ServletRequest request) {
         return (this.encoding);
     }
}

그러나 tomcat 5 에 서 는 필 터 를 사용 하 더 라 도 어 지 러 운 코드 를 얻 을 수 있 습 니 다. 그 이 유 는 무엇 입 니까?
3. 고급 해결 방법
이 는 tomcat 4 와 tomcat 5 에서 매개 변 수 를 처리 하 는 것 이 다 르 기 때문에 tomcat 4 에서 get 과 post 의 인 코딩 이 같 기 때문에 필터 에서 request. setCharacterEncoding 을 통 해 한 번 만 설정 하면 get 과 post 의 문 제 를 해결 할 수 있 습 니 다.그러나 tomcat 5 에서 get 과 post 의 처 리 는 분리 되 어 진행 되 었 습 니 다. tomcat 5 에서 인 코딩 문 제 를 해결 하기 위해 tomcat 의 작 가 는 많은 노력 을 했 습 니 다. 구체 적 으로 는 tomcat 의 프로필 server. xml 에서 Connector 요 소 를 다음 과 같은 설정 파 라 메 터 를 추가 하여 인 코딩 을 직접 설정 하 는 것 으로 나 타 났 습 니 다.
URIEncoding: URI 를 통 해 전 달 된 내용 에 사용 할 인 코딩 을 설정 합 니 다. tomcat 는 여기 서 지정 한 인 코딩 을 사용 하여 클 라 이언 트 가 전송 한 내용 을 인 코딩 합 니 다.
URI 가 뭐 죠?
자바 doc 의 설명 은 다음 과 같다. URI 는 통 일 된 자원 식별 자 이 고 URL 은 통 일 된 자원 포 지 셔 닝 문자 이다.따라서 모든 URL 이 URI 이지 만 모든 URI 가 URL 인 것 은 아니다.이 는 URI 에 자원 이름 (URN) 을 통일 하 는 하위 클래스 도 포함 되 어 있 기 때 문 입 니 다. 자원 이름 은 지정 되 어 있 지만 자원 을 찾 는 방법 은 지정 되 지 않 습 니 다.
즉, 우리 가 get 방법 을 통 해 제출 한 매개 변 수 는 실제 적 으로 uri 를 통 해 제출 된 것 이 고 모두 이 매개 변 수 를 관리 합 니 다. 이 매개 변 수 를 설정 하지 않 으 면 tomcat 는 기본 적 인 iso 8859 - 1 을 사용 하여 클 라 이언 트 의 내용 을 인 코딩 합 니 다.
useBody Encoding ForURI: Body 와 같은 인 코딩 으로 URI 를 처리 합 니 다. 이 설정 은 tomcat 4 와 호 환 되 기 위해 서 입 니 다. 원래 tomcat 4 와 tomcat 5 중대 매개 변 수 는 다 르 고 tomcat 4 에서 get 과 post 의 인 코딩 은 같 습 니 다.따라서 필터 에 request. set CharacterEncoding 을 한 번 만 설정 하면 get 과 post 문 제 를 해결 할 수 있 습 니 다.그러나 tomcat 5 에서 get 과 post 의 처 리 는 분리 되 어 진행 되 며, get 의 처 리 는 앞의 URIEncoding 을 통 해 처리 되 며, post 의 내용 은 여전히 request. setCharacterEncoding 을 통 해 처리 되 며, 호환성 을 유지 하기 위해 이 설정 이 있 습 니 다.
useBody Encoding ForURI 를 진짜 로 설정 하면 request. set CharacterEncoding 을 통 해 get 과 post 의 난 코드 문 제 를 직접 해결 할 수 있 습 니 다.
이렇게 하면 server. xml 에 URIEncoding 을 설정 하여 get 방법 중의 매개 변수 문 제 를 해결 하고 필 터 를 사용 하여 post 방법 중의 문 제 를 해결 할 수 있 습 니 다.
또는 server. xml 에서 useBody Encoding ForURI 를 true 로 설정 하여 필터 에 맞 춰 인 코딩 문 제 를 해결 할 수도 있 습 니 다.
여기 서 저 는 사이트 의 창작 과정 에서 utf - 8 인 코딩 을 사용 하여 어 지 러 운 문 제 를 철저히 해결 할 것 을 강력 히 건의 합 니 다.
구체 적 인 조작 은 다음 과 같다.
1. 페이지 내용 은 utf - 8 형식 으로 저장 하고 페이지 에 < mete http - equiv = "contentType" c > 를 추가 합 니 다.
2. 서버 쪽 server. xml 에 useBody Encoding ForURI = true 설정
3, 필터 사용, 필터 설정 인 코딩 utf - 8

좋은 웹페이지 즐겨찾기