Resuelva el problema de los caracteres confusos chinos en Obtener parámetros de solicitud

Resuelva el problema de los caracteres confusos chinos en Obtener parámetros de solicitud

Consejos antes de ver:

La versión de IDEA utilizada en este artículo es la última 2019.1, la versión JDK es 1.8.0_141 y la versión de Tomcat es 9.0.12.

En el proyecto hace unos días, al usar get para enviar una solicitud de url para enviar parámetros en chino, aparecían caracteres confusos, después de buscar el motivo en Internet, se proporcionaron las siguientes soluciones.

1.encodeURI

1.1 Frente

La parte del código de la página jsp de front-end es la siguiente

<script type="text/javascript">
    function doSubmit(){
     
     
        var url = "${pageContext.request.contextPath}/test/testEncodeURI"
            + "?userName=" + encodeURI(encodeURI("张三"));
        window.location.href = url;
    }
</script>

Nota

1.2 Entre bastidores

El controlador de prueba de fondo es el siguiente

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";
    }
}

Nota

Los resultados son los siguientes
Inserte la descripción de la imagen aquí

1.3 Resumen

  1. El proceso de codificación y decodificación es el siguiente:
    codificación UTF-8-> codificación UTF-8 (iso-8859-1 )-> decodificación iso-8859-1-> decodificación UTF-8, el proceso de codificación y decodificación es simétrico, por lo que no aparecerá Ilegible.

  2. El front-end encodeURI dos veces: la
    función encodeURI usa utf-8 para codificar, y cuando el servidor está decodificando, no es decodificado por uft-8 por defecto, por lo que aparecerán caracteres confusos.
    EncodeURI dos veces, la URL obtenida en la primera codificación es UTF-8, y la URL obtenida en la segunda codificación todavía está en UTF-8, pero en efecto, es equivalente a realizar la codificación UTF-8 primero (en este momento Todos se han convertido a caracteres ASCII) y la codificación iso-8859-1 se vuelve a realizar, porque la codificación UTF-8 y la codificación ISO-8859-1 tienen el mismo efecto para los caracteres en inglés.

  3. Decodificación en segundo plano:
    cuando reciba parámetros en segundo plano, primero decodifique automáticamente la primera vez a través de request.getParameter () (puede ser gb2312, gbk, utf-8, iso-8859-1 y otros conjuntos de caracteres, que no tienen ningún efecto en el resultado) para obtener caracteres ascii , Y luego use UTF-8 para la segunda decodificación, generalmente usando el método java.net.URLDecoder ("", "UTF-8").

Supongo que te gusta

Origin blog.csdn.net/weixin_43611145/article/details/108826778
Recomendado
Clasificación