springmvc+mybatis+mysql 중국어 디코딩 문제 해결

최근 aax를 사용하여springmvc 백엔드 조회 mysql 데이터베이스를 요청하였는데, 페이지에 중국어 오류가 발생했습니다.
처음에 mybatis에서 다음과 같이 설정했습니다.

<select id="queryContentById" resultType = "java.lang.String" parameterType="String" >
    select text from News where id=#{o} 
</select>

여기서 표 뉴스의 text 필드는blob 형식입니다
이렇게 찾아낸 텍스트 값은 컨트롤러에 계속 혼란스러워 보입니다.
이후 구글은 관련resultType=blob 관련 내용을 찾았으나 결과가 없자 이를resultType="java.util.Map"으로 바꾸고

byte[] b = (byte[]) map.get("text");
String s = new String(b,"utf-8");

s를 출력합니다. 이때 중국어는 정상적으로 표시되지만 페이지 표시는 여전히 혼란스럽습니다.
따라서 aax 요청에 따라 응답 헤더 정보를 검사하여 다음과 같이 찾습니다

Content-Typetext/html;charset=ISO-8859-1

데이터베이스에서 인코딩이utf-8로 통일되었기 때문에 응답 헤더 정보 수정

@RequestMapping(value = "/queryContentById", method = RequestMethod.GET,produces = "text/plain;charset=UTF-8")
public @ResponseBody String queryContentById(@RequestParam("id") String id) throws SQLException, UnsupportedEncodingException {
  Map map = (Map) ndrService.queryContentById(id);
  byte[] b = (byte[]) map.get("text");
  String s = new String(b,"utf-8");
  return s;
}
우리 다음 또 다른 예시 의 문제 를 보자
1、SpringMVC의 Controller는 디코드를 받습니다.
(1) 웹에 있습니다.xml에 문자 집합 필터:
    SpringEncodingFilter  org.springframework.web.filter.CharacterEncodingFilter     encoding   UTF-8       forceEncoding   true      SpringEncodingFilter  /* 
(2) JSP 등의 페이지에서 수정:charset=UTF-8"및 pageEncoding="UTF-8"
2. Controller는 정확한 중국어를 읽지만 데이터베이스에 저장하면 "??"
(1) 데이터베이스 연결 수정 jdbc_url=jdbc:mysql://localhost:3306/mybatistest?useUnicode=yes&characterEncoding=UTF8("&":xml 파일에 "&"표시)
(2) 데이터베이스 문자 집합을utf-8로 수정: mysql 루트 디렉터리에서 my를 엽니다.ini(mysql5.6은 my-default.ini입니다. 이것을 my.ini라고 명명하려면 아래의 구체적인 위치에 추가(또는 수정)합니다.
[mysqld]character-set-server=utf8 [client]default-character-set = utf8[mysql]default-character-set = utf8
이렇게 내 쪽에 설치하면 아무런 문제가 없다.
요약:
보통 중국어 디코딩 문제는 문자 인코딩 설정이 잘못되어 발생하는 것입니다. 저는 데이터베이스든 자바 파일이든 jsp 파일이든 모두 UTF-8로 통일되었습니다.결국 문제가 해결되었다.

좋은 웹페이지 즐겨찾기