요청 매개 변수 가져 오기에서 중국어 왜곡 된 문자 문제 해결

요청 매개 변수 가져 오기에서 중국어 왜곡 된 문자 문제 해결

보기 전 팁 :

이 기사에 사용 된 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 요약

  1. 인코딩 및 디코딩 프로세스는 다음과 같습니다 :
    UTF-8 인코딩-> UTF-8 (iso-8859-1) 인코딩-> iso-8859-1 디코딩-> UTF-8 디코딩, 인코딩 및 디코딩 프로세스가 대칭이므로 나타나지 않습니다. 왜곡되었습니다.

  2. 프런트 엔드 encodeURI 두 번 :
    encodeURI 함수는 인코딩에 utf-8을 사용하고 서버가 디코딩 할 때 기본적으로 uft-8에 의해 디코딩되지 않으므로 잘못된 문자가 나타납니다.
    EncodeURI를 두 번, 첫 번째 인코딩에서 얻은 URL은 UTF-8이고 두 번째 인코딩에서 얻은 URL은 여전히 ​​UTF-8이지만 실제로는 UTF-8 인코딩을 먼저 수행하는 것과 같습니다 (현재 모두 ASCII 문자로 변환 됨) UTF-8 인코딩과 ISO-8859-1 인코딩이 영어 문자에 대해 동일한 효과를 갖기 때문에 iso-8859-1 인코딩이 다시 수행됩니다.

  3. 백그라운드 디코딩 : 백그라운드
    에서 매개 변수를 수신 할 때 먼저 request.getParameter () (gb2312, gbk, utf-8, iso-8859-1 및 결과에 영향을주지 않는 기타 문자 세트 일 수 있음)를 통해 처음으로 자동으로 디코딩하여 ASCII 문자를 얻습니다. , 그런 다음 두 번째 디코딩에 일반적으로 java.net.URLDecoder ( "", "UTF-8") 메서드를 사용하여 UTF-8을 사용합니다.

추천

출처blog.csdn.net/weixin_43611145/article/details/108826778