java 웹 요청 및 응답에서 중국어 디코딩 문제 분석

설명: 컴퓨터에 저장된 모든 텍스트 정보는 일정한 인코딩 테이블(0,1,0,1)로 우리가 아는 문자(한자 또는 영문 문자)를 저장하고, 문자에서 컴퓨터로 저장되는 바이너리 과정은 인코딩이며, 바이너리에서 텍스트로 읽는 과정을 디코딩이라고 한다.문자 인코딩은 여러 가지 다른 인코딩 테이블이 있기 때문에 인코딩 형식과 디코딩 형식이 같은 인코딩 테이블이 아니면 혼란이 발생한다.디코딩을 피하려면 저장하고 읽을 때 같은 디코딩을 사용해야 합니다.
자바 웹 프로그래밍에서 자주 디코딩이 발생합니다. 디코딩을 피하는 방법을 자세히 설명합니다.
1 웹 인코딩
웹 페이지를 작성할 때 웹 페이지의 인코딩 형식을 지정해야 합니다. 을 사용하여 지정합니다.브라우저가 요청을 읽거나 보낼 때 지정한 인코딩 형식으로 데이터를 저장하거나 보냅니다.여기는utf-8 형식입니다.
예를 들어 코드 세그먼트:

  <form action="/Pro1/bb" method="post">
   :
  <input type="text" name="username" ><br>
  
   :
   <input type="radio" name="gender" value=" ">&nbsp; <input type="radio" name="gender" value=" "><br>
  
   :<br>
   <input type="checkbox" name="color" value=" ">&nbsp;&nbsp;  <input type="checkbox" name="color" value=" ">&nbsp;&nbsp;
   <input type="checkbox" name="color" value=" "> 
   
  <br>  
  <select name="country">
   <option value=" "> </option>
   <option value=" "> </option>
   <option value=" "> </option>
  </select>
  
  <br>
  <input type="submit" value=" ">&nbsp;
  <input type="reset" value=" ">
  
  
 </form>

2 백엔드 읽기 요청 데이터
자바 웹의 servlet에서 요청한 데이터를 얻으려면 전송된 2진 데이터를 상응하는 코드표에 따라 디코딩해야 상응하는 인류가 문자열을 읽을 수 있다.이 예는post 방법을 사용하기 때문에post 요청을 처리할 때 중국어로 된 요청 파라미터를 얻기 전에 인코딩 형식을 설정해야 합니다. 그렇지 않으면 디코딩이 발생합니다.서버는 기본적으로 iso-8859-1 인코딩 테이블을 사용하여 디코딩하기 때문입니다.
물론 출력에서 중국어 문자를 출력하려면 통일된 문자 인코딩을 사용해야 합니다. 여기는utf-8입니다. 코드는 다음과 같습니다.

public void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  request.setCharacterEncoding("utf-8");
  response.setContentType("text/html;charset=utf-8");
  PrintWriter out = response.getWriter();
  String username = request.getParameter("username");
  String gender = request.getParameter("gender");
  String[] colors = request.getParameterValues("color");
  String country = request.getParameter("country");
  
  out.println("<!DOCTYPE HTML>");
  out.println("<HTML>");
  out.println(" <HEAD><TITLE> servlet</TITLE></HEAD>");
  out.println(" <BODY>");
  out.print("<h1> </h1>");
  
  out.print("<p>");
  out.print(" :"+username+"<br>");
  out.print(" :"+gender+"<br>");
  out.print(" :");
  for(String cr:colors){
   out.print(cr+" ");
  }
  out.print("<br>");
  
  out.print(" :"+country+"<br>");
  
  out.print("</p>");
  
  out.println(" </BODY>");
  out.println("</HTML>");
 }

주의: 여기의 request.setCharacterEncoding("utf-8");요청 실체의 내용에만 유효합니다.post 요청 매개 변수는 요청 실체에 저장됩니다. get 방법의 요청 매개 변수는 url 뒤에 놓고 물음표로 시작합니다.'&'는 여러 개의 매개 변수를 연결합니다.그래서 get 방법의 매개 변수를 얻으려면 수동 디코딩을 사용하거나 Filter를 사용해야 합니다.
수동 디코딩 방법은 간단하게 성별만 디코딩하기 위해 실제 사용에서 매개 변수를 디코딩해야 합니다: String gender = new String(req.getParameter("gender").getBytes("iso-8859-1"),"utf-8") ;
이때가 되면 웹 페이지와 서버 측에서 한자 부호가 발생하는 현상을 완벽하게 해결할 수 있다. 기억해라. 부호가 발생하는 것은 모두 인코딩과 디코딩이 서로 다른 인코딩 테이블을 사용하기 때문에 같은 인코딩 테이블을 사용하면 문제를 해결할 수 있다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.

좋은 웹페이지 즐겨찾기