Résolvez le problème des caractères chinois déformés dans Obtenir les paramètres de demande

Résolvez le problème des caractères chinois déformés dans Obtenir les paramètres de demande

Conseils avant de visionner:

La version IDEA utilisée dans cet article est Ultimate 2019.1, la version JDK est 1.8.0_141 et la version Tomcat est 9.0.12.

Dans le projet d'il y a quelques jours, lors de l'utilisation de get pour envoyer une demande d'URL pour envoyer des paramètres en chinois, des caractères déformés sont apparus. Après avoir recherché la raison sur Internet, les solutions suivantes ont été fournies.

1.encodeURI

1.1 Extrémité avant

Une partie du code de la page jsp frontale est la suivante

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

Remarque

1.2 Dans les coulisses

Le contrôleur de test d'arrière-plan est le suivant

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

Remarque

Les résultats sont les suivants
Insérez la description de l'image ici

1.3 Résumé

  1. Le processus d'encodage et de décodage est le suivant:
    encodage UTF-8-> encodage UTF-8 (iso-8859-1 )-> décodage iso-8859-1-> décodage UTF-8, le processus d'encodage et de décodage est symétrique, donc il n'apparaîtra pas Déformé.

  2. Le frontal encodeURI deux fois: La
    fonction encodeURI utilise utf-8 pour l'encodage, et lorsque le serveur est en train de décoder, il n'est pas décodé par uft-8 par défaut, donc des caractères déformés apparaissent.
    EncodeURI deux fois, l'URL obtenue dans le premier encodage est UTF-8, et l'URL obtenue dans le second encodage est toujours en UTF-8, mais en fait, cela équivaut à effectuer d'abord l'encodage UTF-8 (pour le moment Tous ont été convertis en caractères ASCII), et le codage iso-8859-1 est à nouveau effectué, car le codage UTF-8 et le codage ISO-8859-1 ont le même effet pour les caractères anglais.

  3. Décodage en arrière-plan:
    Lors de la réception de paramètres en arrière-plan, décodez d'abord automatiquement la première fois via request.getParameter () (il peut s'agir de gb2312, gbk, utf-8, iso-8859-1 et d'autres jeux de caractères, ce qui n'a aucun effet sur le résultat) pour obtenir des caractères ascii , Et puis utilisez UTF-8 pour le deuxième décodage, généralement en utilisant la méthode java.net.URLDecoder ("", "UTF-8").

Je suppose que tu aimes

Origine blog.csdn.net/weixin_43611145/article/details/108826778
conseillé
Classement