요청 매개 변수 가져 오기에서 중국어 왜곡 된 문자 문제 해결
보기 전 팁 :
이 기사에 사용 된 IDEA 버전은 2019.1, JDK 버전은 1.8.0_141, Tomcat 버전은 9.0.12입니다.
며칠 전 프로젝트에서 url 요청을 가져 와서 중국어로 매개 변수를 보내기 위해 url 요청을 보낼 때 글자가 깨져서 인터넷에서 그 이유를 검색 한 후 다음과 같은 해결책이 제공되었습니다.
1. 인코딩 URI
1.1 프런트 엔드
코드의 프론트 엔드 jsp 페이지 부분은 다음과 같습니다.
<script type="text/javascript">
function doSubmit(){
var url = "${pageContext.request.contextPath}/test/testEncodeURI"
+ "?userName=" + encodeURI(encodeURI("张三"));
window.location.href = url;
}
</script>
노트
1.2 무대 뒤
백그라운드 테스트 컨트롤러는 다음과 같습니다.
package com.example.controller;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import javax.servlet.http.HttpServletRequest;
import java.net.URLDecoder;
/**
* 测试Controller
* @author jjy
* @date 2020-07-21
*/
@Controller
@RequestMapping("/test")
public class TestController {
/**
* 测试encodeURI
* @param request
* @return
*/
@RequestMapping("testEncodeURI")
public String testEncodeURI(HttpServletRequest request){
String userName = request.getParameter("userName");
System.out.println("Before encodeURI : " + userName);
try {
userName = URLDecoder.decode(userName, "UTF-8");
} catch (Exception e){
e.printStackTrace();
}
System.out.println("After encodeURI : " + userName);
return "index";
}
}
노트
결과는 다음과 같습니다.
1.3 요약
-
인코딩 및 디코딩 프로세스는 다음과 같습니다 :
UTF-8 인코딩-> UTF-8 (iso-8859-1) 인코딩-> iso-8859-1 디코딩-> UTF-8 디코딩, 인코딩 및 디코딩 프로세스가 대칭이므로 나타나지 않습니다. 왜곡되었습니다. -
프런트 엔드 encodeURI 두 번 :
encodeURI 함수는 인코딩에 utf-8을 사용하고 서버가 디코딩 할 때 기본적으로 uft-8에 의해 디코딩되지 않으므로 잘못된 문자가 나타납니다.
EncodeURI를 두 번, 첫 번째 인코딩에서 얻은 URL은 UTF-8이고 두 번째 인코딩에서 얻은 URL은 여전히 UTF-8이지만 실제로는 UTF-8 인코딩을 먼저 수행하는 것과 같습니다 (현재 모두 ASCII 문자로 변환 됨) UTF-8 인코딩과 ISO-8859-1 인코딩이 영어 문자에 대해 동일한 효과를 갖기 때문에 iso-8859-1 인코딩이 다시 수행됩니다. -
백그라운드 디코딩 : 백그라운드
에서 매개 변수를 수신 할 때 먼저 request.getParameter () (gb2312, gbk, utf-8, iso-8859-1 및 결과에 영향을주지 않는 기타 문자 세트 일 수 있음)를 통해 처음으로 자동으로 디코딩하여 ASCII 문자를 얻습니다. , 그런 다음 두 번째 디코딩에 일반적으로 java.net.URLDecoder ( "", "UTF-8") 메서드를 사용하여 UTF-8을 사용합니다.