Maison  >  Article  >  Java  >  Solution à la requête tronquée en Java

Solution à la requête tronquée en Java

尚
original
2019-11-26 10:19:272304parcourir

Solution à la requête tronquée en Java

Problèmes :

Lors de l'envoi d'une requête au serveur via une requête get, si les paramètres de la requête sont en chinois, les paramètres reçus par le serveur seront tronqués.

Analyse des causes et solutions aux caractères tronqués :

1. À propos du décodage et de l'encodage

Encodage : '中'→1110001

Décodage : 1110001→'中'

Caractères tronqués : différents jeux de caractères sont utilisés dans les processus d'encodage et de décodage

2 Problèmes d'encodage et de décodage de caractères dans les applications Web

(1) Processus de demande. :

f35d6e602fd7d0f0edfa6f7d103c1b57Requête GET

Le côté navigateur est encodé en UTF-8, il doit donc également être décodé en UTF-8 côté serveur

Depuis les paramètres de la requête GET sont attachés derrière l'adresse URL, le jeu de caractères de décodage de l'adresse URL doit donc être unifié.

Solution :

Trouvez le premier connecteur dans le fichier de configuration Tomcat server.xml et ajoutez l'attribut suivant URIEncoding=UTF-8

2cc198a1d5eb0d3eb508d858c9f5cbdbPOST request

Exécuter avant d'obtenir les paramètres de la requête : request.setCharacterEncoding("UTF-8");

(2) Processus de réponse

(1) Spécifier le jeu de caractères d'encodage de la réponse data

(2) Indiquez au navigateur quel jeu de caractères doit être utilisé pour décoder les données de réponse

f35d6e602fd7d0f0edfa6f7d103c1b57 Jeu de caractères de décodage"

2cc198a1d5eb0d3eb508d858c9f5cbdbDéfinissez le jeu de caractères d'encodage : indiquez au navigateur le type de contenu des données de réponse actuelles : réponse.setContentType("text/html;charset=UTF-8"); Il Il convient de noter qu'il doit être spécifié dans la réponse.getWriter() définie avant, sinon il ne sera pas valide.

Suggestion :

Tous les filtres ne fonctionnent que sur les requêtes POST. La définition de la méthode de codage des caractères dans la page jsp ne fonctionne que sur les requêtes POST lorsque le formulaire est soumis, et sur les requêtes GET, elle ne peut pas être définie. son codage de caractères.

utilise la méthode de codage par défaut dans les requêtes GET, donc pour les requêtes GET, vous devez définir URIEncoding="UTF-8" dans le fichier server.xml puis redémarrer TOMCAT peut résoudre le problème de Caractères chinois tronqués,

, mais il n'est pas recommandé de transmettre des paramètres chinois dans les requêtes de lien hypertexte href, et il n'est pas non plus recommandé de transmettre des paramètres chinois dans les requêtes GET. " keywords").getBytes("8859_1"));Bien que cette méthode résolve temporairement le problème des caractères chinois tronqués,

, cependant, le problème des caractères chinois tronqués peut encore survenir lors d'une maintenance ultérieure et d'un déploiement sur d'autres serveurs, son utilisation n’est donc pas recommandée.

Pour les demandes de publication, écrivez simplement le code suivant dans Servlet ou jsp pour résoudre le problème des caractères chinois tronqués transmis depuis le formulaire

"reply.jsp?title="+java.net.URLEncoder.encode(keywords)

Comprendre :

Et pour Get demandes, étant donné que les paramètres de la demande seront ajoutés à l'URL dans la barre d'adresse, la méthode de traitement ci-dessus ne peut pas être utilisée. Cela devrait ressembler à ceci :

 request.setCharacterEncoding("utf-8");

Une autre façon consiste à obtenir les paramètres de la requête, puis à ré-encoder les valeurs des paramètres de la requête, c'est-à-dire à les convertir d'abord en un tableau d'octets, puis à re-décoder le tableau d'octets. dans une chaîne.

   String str=request.getQueryString();
   //使用URLDecoder解码字符串
   String str1=java.net.URLDecoder.decode(str,"utf-8");
   String[] paraStrings=str1.split("&");
    //paraStrings[0]就是第一个参数,依次类推...
   for(String paraString : paraStrings)
   {
         String[] nameValue=paraString.split("=");
         //nameValue[0]就是表单的name,nameValue[1]就是表单name对应的值
   }

Conclusion : lors du passage des paramètres chinois, il est préférable d'utiliser la requête POST pour soumettre. Différents paramètres de serveur peuvent avoir différentes méthodes de codage, et différents paramètres de système d'exploitation peuvent avoir différentes méthodes de codage.

Recommandé :

Tutoriel de base Java

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn