eclipse3.2+j2ee5.0 +tomcat5.09+mysql5.0을 기반으로 개발했는데,
먼저 POST 형식의 중국어 왜곡 데이터를
필터를 통해 실시간으로 필터링할 수 있습니다
.필터 코드는 다음과 같습니다:
packagefilters;
import java.io.IOException;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.UnavailableException;
공용 클래스 SetCharacterEncodingFilter가 필터를 구현합니다...{
보호된 문자열 인코딩 = null;
protected FilterConfig filterConfig = null;
보호된 부울 무시 = true
공개 무효 파괴() ...{
this.encoding = null;
this.filterConfig = null;
}
공개 무효 doFilter(ServletRequest 요청, ServletResponse 응답,
FilterChain 체인)
throws IOException, ServletException ...{
// 사용할 문자 인코딩을 조건부로 선택 및 설정
if (무시 || (request.getCharacterEncoding() == null)) ...{
문자열 인코딩 = selectEncoding(요청);
if(인코딩 != null)
request.setCharacterEncoding(인코딩);
}
// 다음 필터로 제어를 전달합니다.
chain.doFilter(request, response);
}
public void init(FilterConfig filterConfig)는 ServletException을 발생시킵니다 ...{
this.filterConfig = filterConfig;
this.encoding = filterConfig.getInitParameter("encoding");
문자열 값 = filterConfig.getInitParameter("ignore");
if (값 == null)
this.ignore = true;
else if (value.equalsIgnoreCase("true"))
this.ignore = true;
else if (value.equalsIgnoreCase("예"))
this.ignore = true;
또 다른
this.ignore = false
}
protected String selectEncoding(ServletRequest 요청) ...{
반환(this.encoding);
}
}
필터 구성(구성 web.xml):
<필터>
<필터-클래스>filters.SetCharacterEncodingFilter
<초기 매개변수>
<매개변수값>GBK매개변수값>
/init-param>
<필터 매핑>
필터 매핑>
2. 중국어 데이터를 데이터베이스에 저장할 때 문자가 깨지는 문제는
mysql의 예입니다.
jdbc:mysql://localhost:3306/workshopdb? useUnicode=true&characterEncoding=GBK
3. URL을 통한 매개변수 전달 및 중국어 파일 이름 식별 문제
문제의 증상: 1. URL을 통한 매개변수 전달(예:
http://localhost:81/crjy/admin/articlelist.jsp?levelId=64&levelName =Student) 파티 빌딩
request.getParameter("levleName")을 통해 얻은 값은 Ranma입니다.
2. 중국어 파일 이름을 인식합니다. 예:
사진이 표시되지 않습니다.
해결 방법:
1. 첫 번째 문제만 해결하려는 경우 코드 두 줄이면 매우 간단합니다.
String role=request.getParameter("chara");
role=new String(role.getBytes("ISO-8859-1"),"GB2312");
out.println(역할);
Tomcat 서버는 기본적으로 ISO-8859-1 문자 집합을 사용하기 때문입니다. 그러나 이는 첫 번째 문제만 해결하고 중국어 파일 이름 문제는 해결하지 못합니다.
2. 두 가지 문제를 함께 해결합니다. server.xml을 수정하고 다음 명령문을 찾아 URIEncoding="GB18030"을 추가하면 두 문제가 함께 해결됩니다. 역할 필요 없음) =new String(role.getBytes("ISO-8859-1"),"GB2312"); 변환, 획득된 매개변수는 일반 중국어임)
또한 많은 기사에서는 중국어 파일 이름 문제를 해결할 수 있는 URIEncoding="UTF-8"을 추가할 수 있다고 소개하지만 String role=request.getParameter("chara"); , UTF-8로 인코딩된 경우 GB2312로 변환해야 하는데 이는 번거로운 작업입니다.
위 내용은 제가 사용한 내용을 요약한 것입니다. 모두가 귀중한 의견을 제공할 수 있기를 바랍니다.
http://blog.csdn.net/lijiuu/archive/2007/02/25/1514354.aspx