>php教程 >PHP开发 >jsp 및 servlet으로 운영되는 mysql의 중국어 문자 깨짐 문제에 대한 해결 방법

jsp 및 servlet으로 운영되는 mysql의 중국어 문자 깨짐 문제에 대한 해결 방법

高洛峰
高洛峰원래의
2016-12-29 17:05:501340검색

먼저, 인코딩이 통일되어 있는 한 왜곡된 문자가 나타나지 않는 곳을 살펴보겠습니다. (개인적으로 가장 좋다고 생각하는) uft-8을 예로 들어보겠습니다.

1. JSP 페이지에서 잘못된 코드가 나타나는 경우 JSP 헤더 페이지를 추가하세요.
a2b6cf0a1a0ceca8b5ebe6eebaecbcf8
head 태그에 태그를 추가합니다.

2. 서블릿에 잘못된 문자가 나타나면 두 가지 방법이 있습니다.
하나는 각 서블릿 UTF의 doget 및 doPost 메소드 헤더에
request.setCharacterEncoding("을 추가하는 것입니다. 8″);
두 번째 옵션은 가장 안전한 것으로, 국제화라고도 하는 전용 필터 클래스를 작성하는 것입니다. 클래스 이름은 SetCharacterEncodingFilter이고 내용은 다음과 같습니다

package com.sharep.filter;//包名
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;
public class SetCharacterEncodingFilter implements Filter
{
 protected String encoding = null;
 protected FilterConfig filterConfig = null;
 protected boolean ignore = true;
 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
   this.ignore = false;
 }
 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 destroy()
 {
  this.encoding = null;
  this.filterConfig = null;
 }
 protected String selectEncoding(ServletRequest request)
 {
  return (this.encoding);
 }
}

그런 다음 web-inf에서 web.xml에 다음 코드를 추가합니다.

<filter>
  <filter-name>SetCharacterEncoding</filter-name>
  <filter-class>com.young.filter.SetCharacterEncodingFilter</filter-class>//注意这里是类名,要有完整包名
  <init-param>
   <param-name>encoding</param-name>
   <param-value>UTF-8</param-value>
  </init-param>
 </filter>

 <filter-mapping>
  <filter-name>SetCharacterEncoding</filter-name>
  <url-pattern>/*</url-pattern>
 </filter-mapping>

그렇습니다!

3. 그래도 문자가 깨져 있으면 mysql 데이터베이스에 문제가 있는 것입니다.

1) 데이터베이스 생성 시 데이터베이스 인코딩이 UTF-8인지 확인하세요. 각 테이블에 인코딩 형식을 지정하는 것이 가장 좋습니다. 기본 mysql은 latin1입니다.
2) mysql 버전이 UTF-8인 경우 4.x 이상에서는 여전히 잘못된 문자가 데이터베이스에 나타납니다. 해결 방법은 두 가지입니다.
첫 번째는 데이터베이스에 연결하기 위해 코드에서 인코딩 방법을 지정하는 것입니다.

String url = “jdbc:mysql://localhost:3306/test2?autoReconnect=true&useUnicode=true&characterEncoding=gbk&mysqlEncoding=utf8″ ;

그래도 여전히 문제가 발생하는 경우 작동하지 않으면

show variables like ‘collation_%&#39;;

명령을 사용하세요. 기본 문자 집합을 확인하세요. utf-8이 아닌 경우 my.ini(windows) 또는 my.cnf(linux)에서 해당 인코딩을 utf8로 변경하세요. ) 그런 다음 mysql 서버를 다시 시작하세요.

더 많은 jsp 및 서블릿 작업 mysql의 중국어 문자 문제 해결에 대한 관련 기사는 PHP 중국어 웹사이트에 주목하세요!


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.