java 웹 요청 및 응답에서 중국어 디코딩 문제 분석
자바 웹 프로그래밍에서 자주 디코딩이 발생합니다. 디코딩을 피하는 방법을 자세히 설명합니다.
1 웹 인코딩
웹 페이지를 작성할 때 웹 페이지의 인코딩 형식을 지정해야 합니다. 을 사용하여 지정합니다.브라우저가 요청을 읽거나 보낼 때 지정한 인코딩 형식으로 데이터를 저장하거나 보냅니다.여기는utf-8 형식입니다.
예를 들어 코드 세그먼트:
<form action="/Pro1/bb" method="post">
:
<input type="text" name="username" ><br>
:
<input type="radio" name="gender" value=" "> <input type="radio" name="gender" value=" "><br>
:<br>
<input type="checkbox" name="color" value=" "> <input type="checkbox" name="color" value=" ">
<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=" ">
<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") ;
이때가 되면 웹 페이지와 서버 측에서 한자 부호가 발생하는 현상을 완벽하게 해결할 수 있다. 기억해라. 부호가 발생하는 것은 모두 인코딩과 디코딩이 서로 다른 인코딩 테이블을 사용하기 때문에 같은 인코딩 테이블을 사용하면 문제를 해결할 수 있다.
이상은 본문의 전체 내용입니다. 여러분의 학습에 도움이 되고 저희를 많이 응원해 주십시오.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
38. Java의 Leetcode 솔루션텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.