문제:
get 요청을 통해 서버에 요청을 보낼 때 요청 매개변수가 중국어인 경우 서버가 수신한 매개변수가 왜곡됩니다.
깨진 코드의 원인 분석 및 해결 방법:
1. 디코딩 및 인코딩 정보
인코딩: '중국어'→1110001
디코딩: 1110001→'중국어'
깨진 코드: 인코딩 및 인코딩에 다른 문자 집합이 사용됩니다. 디코딩 프로세스
2. 웹 애플리케이션의 문자 인코딩 및 디코딩 문제
(1) 요청 프로세스:
<1>GET request
브라우저 측이 UTF-8로 인코딩되므로 서버 측도 UTF- 8. Decode
URL 주소 끝에 GET 요청 매개변수가 첨부되므로 URL 주소의 디코딩 문자 집합이 통일되어야 합니다.
해결책:
Tomcat 구성 파일 server.xml에서 첫 번째 커넥터를 찾아 다음 속성 URIEncoding=UTF-8
<2>POST request
요청 매개변수를 가져오기 전에 실행하세요. request.setCharacterEncoding(" UTF-8");
(2) 응답 프로세스
(1) 응답 데이터의 인코딩 문자 집합을 지정합니다
(2) 응답 데이터를 디코딩하는 데 사용해야 하는 문자 집합을 브라우저에 알려줍니다.
< 1>Tomcat 서버 "인코딩된 문자 집합"은 "디코딩된 문자 집합"에 따라 자동으로 설정됩니다.
<2> 인코딩된 문자 집합 설정: 브라우저에 현재 응답 데이터의 콘텐츠 유형을 알려줍니다. response.setContentType( "text/html;charset=UTF-8" ); response.getWriter(); 전에 설정해야 하며, 그렇지 않으면 유효하지 않습니다.
제안:
모든 필터는 POST 요청에서만 작동합니다. jsp 페이지에서 문자 인코딩 방법을 설정하면 양식이 제출될 때 POST 요청에서만 작동합니다. GET 요청에서는 문자 인코딩을 설정할 수 없습니다. 인코딩 방법은 GET 요청에서 사용되므로 GET 요청의 경우 server.xml 파일에 URIEncoding="UTF-8"을 설정한 다음 TOMCAT을 다시 시작해야 중국어 왜곡 문제를 해결할 수 있습니다.
그러나 통과하는 것은 권장되지 않습니다. href 하이퍼링크 요청에 중국어 매개변수가 포함되어 있으며 GET 요청에 중국어 매개변수를 전달하는 것도 권장되지 않습니다.
또한, 중국어의 송수신 시 전송되는 부분에 대해 통일된 인코딩 방법을 구현합니다. 매개변수 전송 시
"reply.jsp?title="+java.net.URLEncoder.encode(keywords)
를 사용하고, 키워드=new String(request.getParameter("keywords").getBytes를 사용합니다. ("8859_1 ")); 이 방법은 한자 깨짐 문제를 일시적으로 해결하지만,
단, 추후 유지 관리 및 다른 서버 배포 시 한자 깨짐 문제가 계속 발생할 수 있으므로 권장하지 않습니다.
Post 요청의 경우 Servlet 또는 jsp에서 다음 코드를 작성하면 양식에서 전달된 중국어 문자 왜곡 문제를 해결할 수 있습니다.
request.setCharacterEncoding("utf-8");
이해:
Get 요청의 경우 요청 매개변수가 이후 주소에 추가되므로 해당 열의 URL에는 위의 처리 방법을 사용할 수 없습니다.
String str=request.getQueryString(); //使用URLDecoder解码字符串 String str1=java.net.URLDecoder.decode(str,"utf-8"); String[] paraStrings=str1.split("&"); //paraStrings[0]就是第一个参数,依次类推... for(String paraString : paraStrings) { String[] nameValue=paraString.split("="); //nameValue[0]就是表单的name,nameValue[1]就是表单name对应的值 }
또 다른 방법은 요청 매개변수를 가져온 다음 요청 매개변수 값을 다시 인코딩하는 것입니다. 즉, 먼저 해당 값을 바이트 배열로 변환한 다음 바이트 배열을 문자열로 다시 디코딩하는 것입니다.
String str=request.getParameter("name"); byte[] bytes=str.getBytes("ISO-8859-1"); String name=new String(bytes,"utf-8");
결론: 중국어 매개변수를 전달할 때 POST 요청을 사용하여 제출하는 것이 가장 좋습니다. 서버 설정에 따라 인코딩 방법이 다를 수 있으며, 운영 체제 설정에 따라 인코딩 방법이 다를 수 있습니다.
추천:
java 기본 튜토리얼위 내용은 Java의 잘못된 요청에 대한 솔루션의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!