La plupart des plateformes de développement, notamment Java, le langage C, Python (et bien plus encore), utilisent presque toutes le chinois dans le processus de développement de code. Lorsque l’ordinateur traite ces éléments, il ne peut pas reconnaître ce que vous écrivez. Il code les données et les convertit dans un langage que l’ordinateur peut reconnaître et exécuter. Si le code compilé n’est pas décompilé, nous verrons un tas de charabia incompréhensible.
Tout d'abord, nous devons comprendre pourquoi des caractères tronqués apparaissent ?
Comment le serveur encode-t-il les données lors de la réception et de l'envoi de données ?
1. Le serveur envoie des données
Pour l'envoi de données, le serveur suit l'ordre de priorité de réponse.setCharacterEncoding—contentType—pageEncoding. les données sont codées.
2. Le serveur reçoit des données
Il existe trois situations pour recevoir des données. L'une concerne les données soumises directement par le navigateur à l'aide de l'URL, et les deux autres sont les données soumises à l'aide des méthodes GET et POST du formulaire.
Parce que le traitement de ces trois méthodes de différents serveurs Web est également différent, nous prenons Tomcat5.0 comme exemple.
①Pour les données soumises par POST sous la forme
Tant que réponse.setCharacterEncoding ou contentType ou pageEncoding est défini sur "utf-8" sur la page JSP, après en acceptant Il n'y aura pas de problèmes de chinois tronqué dans le JSP/SERVLET des données.
②Pour les données soumises par l'URL et les données soumises par la méthode GET sous le formulaire
Il ne suffit pas de définir simplement le paramètre request.setCharacterEncoding dans la JSP /SERVLET qui reçoit les données
Parce que dans Tomcat5.0, ISO-8859-1 est utilisé par défaut pour réencoder (décoder) les données soumises par l'URL et les données soumises par le GET dans le formulaire. Pour résoudre ce problème :
L'attribut useBodyEncodingForURI ou URIEncoding doit être défini dans la balise Connector du serveur de fichiers de configuration de Tomcat ) pour un recodage (décodage) unifié.
Le paramètre useBodyEncodingForURI indique s'il faut utiliser le paramètre request.setCharacterEncoding pour réencoder les données soumises par l'URL et les données soumises par la méthode GET dans le formulaire. Par défaut, ce paramètre est faux. ;
La différence entre URIEncoding et useBodyEncodingForURI est que URIEncoding recode (décode) uniformément les données de toutes les requêtes GET, tandis que useBodyEncodingForURI recode les données en fonction du paramètre request.setCharacterEncoding de la page qui répond au demande. Encodage (décodage), différentes pages peuvent avoir différents encodages de réencodage (décodage). Par conséquent, pour les données soumises par l'URL et les données soumises par la méthode GET dans le formulaire, vous pouvez modifier le paramètre URIEncoding en encodage du navigateur ou modifier useBodyEncodingForURI sur true, et définir le paramètre request.setCharacterEncoding sur l'encodage du navigateur dans la page JSP où les données sont obtenues.
Lors de la soumission d'un JSP, pour le problème du code tronqué, nous devons d'abord comprendre pourquoi le code tronqué apparaît ?
Regardez le fichier d'en-tête JSP : <%@ page contentType="text/html;charset=UTF-8" language="java"%>
Dans ce fichier d'en-tête, il y a aussi un attribut lié à l'encodage : pageEncoding
Parlons d'abord de JSP/Servlet Le rôle de plusieurs codages.
Dans JSP/Servlet, il y a principalement les endroits suivants pour définir l'encodage, pageEncoding="UTF-8", contentType="text/html;charset=UTF- 8 ", request.setCharacterEncoding("UTF-8") et Response.setCharacterEncoding("UTF-8"), dont les deux premiers ne peuvent être utilisés qu'en JSP, et les deux derniers peuvent être utilisés en JSP et Servlet. Ce qui suit est un résumé de la manière d'éviter les caractères chinois tronqués lors de l'utilisation de Tomcat7.0 comme serveur WEB.
request.setCharacterEncoding("UTF-8") est utilisé pour définir l'encodage demandé par le client pour le réencodage côté serveur. Cette méthode permet de préciser l'encodage utilisé lors du réencodage (ou décodage) des données envoyées par le navigateur.
response.setCharacterEncoding("UTF-8") est utilisé pour spécifier l'encodage utilisé pour ré-encoder la réponse du serveur côté client.
Lorsque le serveur envoie les données au navigateur, les données sont re-codées et l'encodage est l'encodage.
1. Pour la même application, il est préférable d'utiliser un encodage unifié, UTF-8 est recommandé, et bien sûr GBK est également acceptable.
2. Définissez correctement pageEncoding="UTF-8" de JSP
3. Définissez contentType="text/html;charset= dans tous les JSP/Servlets UTF-. 8" ou réponse.setCharacterEncoding("UTF-8"), définissant ainsi indirectement l'encodage du navigateur.
4. Pour les demandes get ou url qui ne sont pas soumises dans un formulaire, vous pouvez modifier la configuration par défaut de Tomcat. Il est recommandé de définir le paramètre useBodyEncodingForURI sur true, ou vous pouvez définir URIEncoding. paramètre en UTF-8 (cela peut affecter d’autres applications, donc non recommandé). Ou utilisez la méthode suivante pour traiter lors de la réception des données :
request.getParameter("userID"), obtenez la valeur de l'ID utilisateur
request.getParameter("userID" .trim() supprime les espaces des deux côtés de cette valeur
request.getParameter("userID").trim().getBytes("ISO-8859-1")) utilise ISO pour cette chaîne -8859-1 est codée dans un numéro d'octet
new String(request.getParameter("userID").trim().getBytes("ISO-8859-1"),"utf - 8") Passez le nombre d'octets tout à l'heure dans le constructeur de chaîne pour créer un objet chaîne selon l'encodage "utf-8".
5. Utilisez la méthode URLEncoder
avant de transmettre les paramètres :
//Utilisez le mécanisme d'encodage spécifié pour convertir la chaîne en application. /x-www-form-urlencoded Format
String username_encoder = URLEncoder.encode(username,"UTF-8");
Après avoir reçu les paramètres, utilisez :
//Utilisez le mécanisme d'encodage spécifié pour décoder la chaîne application/x-www-form-urlencoded
String username_decoder = URLDecoder.decode(request.getParameter(" nom d'utilisateur"),"UTF-8");
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!