Java 웹의 요청 및 응답에 중국어 문자가 포함되어 있으며 구문 분석 시 왜곡되어 나타납니다.

高洛峰
풀어 주다: 2016-10-11 08:58:24
원래의
1680명이 탐색했습니다.

자바 웹 프로그래밍에서 잘못된 코드가 자주 나타납니다. 이제 잘못된 코드를 방지하기 위한 설정 방법을 자세히 설명하겠습니다.

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 백엔드는 요청 데이터를 읽습니다.

Java 웹 서블릿에서 요청된 데이터를 얻으려면 다음을 수행해야 합니다. 보내십시오. 이진 데이터는 해당 코드 테이블에 따라 디코딩되어야 해당 사람이 읽을 수 있는 문자열을 얻을 수 있습니다. 이 예에서는 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>");
    }
로그인 후 복사

참고: 여기의 요청은 .setCharacterEncoding("utf-8"); 요청 엔터티의 콘텐츠에만 유효합니다. 게시 요청 매개변수는 요청 엔터티에 저장됩니다. get 메소드의 요청 매개변수는 물음표로 시작하는 URL 뒤에 배치되며 '&'는 여러 매개변수를 연결합니다. 따라서 get 메소드의 매개변수를 얻으려면 수동 디코딩을 사용하거나 필터를 사용해야 합니다.

수동 디코딩 방법. 단순화를 위해 실제 사용에서는 각 매개변수를 디코딩해야 합니다. String Gender = new String(req.getParameter("gender").getBytes("iso- 8859) -1"),"utf-8") ;

이쯤 되면 웹페이지나 서버에서 한자가 깨져 나오는 현상은 완벽하게 해결될 수 있습니다. 한 가지 기억해두셔야 할 것은 모두 사용에 의한 한자 깨짐입니다. 코딩 테이블이 다른 이유는 문제를 해결하기 위해 동일한 코딩 테이블을 사용하기 때문입니다.


원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿