중국어 디코딩 오류 (웹 페이지, 서버와 전송 정보에 나타난 중국어 문제 해결 방안)

13674 단어 중국어 부호
중국어 부호 문제가 자주 발생하는데 본고는 선배의 경험을 참고하여 다음과 같이 요약한다.

첫 번째 클래스 질문은 JSP에 나타납니다.


오류 페이지:
 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%@ page contentType="text/html;charset=iso8859-1"%>
3 <html>
4 <head>
5 <title> </title>
6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 </head>
8 </head>
9 <body>
10 !! ??
11 </body>
12 </html>

이 페이지는 인코딩 설정과 관련된 세 가지 부분이 있습니다.
첫 번째 인코딩 형식은 jsp 파일의 저장 형식입니다.Eclipse는 이 인코딩 형식에 따라 파일을 저장합니다.그리고 jsp 파일을 컴파일합니다. 안에 있는 한자를 포함합니다.
두 번째 인코딩은 디코딩 형식입니다.이 페이지에 UTF-8로 저장된 파일은 iso8859-1로 디코딩되어 페이지의 중국어는 틀림없이 혼란스러울 것이다.이 줄이 없으면 기본적으로 iso8859-1의 인코딩 형식을 사용합니다.그러니까 첫 번째와 두 번째가 일치해야 돼.
세 번째 인코딩은 브라우저를 제어하는 디코딩 방식입니다.만약 앞의 디코딩이 일치하고 오류가 없다면, 이 인코딩 형식은 생략할 수 있습니다.브라우저가 어떤 인코딩 형식을 사용할지 확정할 수 없기 때문에 어떤 웹 페이지에 난호가 발생한다.페이지가 때때로 페이지를 끼워 넣기 때문에 브라우저가 인코딩 형식을 혼동하여 혼란이 생겼다.
수정된 페이지: UTF-8 gb2312 로 변경되었지만 코드가 변경되지 않았습니다.
 1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
2 <%@ page contentType="text/html;charset=UTF-8"%>
3 <html>
4 <head>
5 <title> </title>
6 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
7 </head>
8 </head>
9 <body>
10 。 !
11 </body>
12 </html>

두 번째 유형의 문제는 데이터 전송(GET 및 POST 참조 시 디코딩 발생)

  • Get은 양식의 데이터를 variable=value 형식으로 action이 가리키는 URL 뒤에 추가하고 "?"연결, 그리고 각 변수 사이에'&'연결을 사용합니다
  • Post는 폼의 데이터를 form의 데이터체에 놓고 변수와 값에 대응하는 방식으로 action이 가리키는 URL로 전달합니다
  • Get 제한 Form 양식의 데이터 세트 값은 ASCII 문자여야 합니다
  • Post는 전체 ISO10646 문자 세트를 지원합니다..

  • 원인:
    tomcat의 내부 인코딩 형식 iso8859-1.
    데이터를 제출할 때 제출한 인코딩 형식을 설정하지 않으면 iso8859-1 방식으로 제출하고, 받아들인 jsp는utf-8 방식으로 받아들여 혼란을 초래합니다.
    솔루션:
    1. GET 요청 매개변수 처리
    String str = new String(request.getParameter("something").getBytes("ISO-8859-1"),"utf-8") ;모든 중국어 문자열을 디코딩합니다.
    B, POST 요청 매개변수 처리
    요청 처리 페이지의 시작 부분에서 요청을 실행하는 인코딩 코드,request.setCharacterEncoding("UTF-8"), 제출된 내용의 문자 집합을 UTF-8로 설정합니다.String str = request 를 사용합니다.getParameter("something");한자 파라미터를 얻을 수 있다.
    적용 예: (1)
     1 <%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
    2 <%@ page contentType="text/html;charset=UTF-8"%>
    3 <%
    4 request.setCharacterEncoding("UTF-8");
    5 %>
    6 <html>
    7 <head>
    8 <title> </title>
    9 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    10 </head>
    11 </head>
    12 <body>
    13 。 !
    14 </body>
    15 </html>

    (2) 요청을 처리하는 Servlet의 doPost 방법에 request를 추가합니다.setCharacterEncoding("UTF-8")은 효과가 동일합니다.
    (3) 위의 예에서 UTF-8은 gb2312로 변경해도 됩니다.

    좋은 웹페이지 즐겨찾기