1 : Le formulaire soumet les données au premier plan en mode post :
Lorsque le navigateur envoie des données (supposées être "Chine") au serveur, il doit rechercher la table de codes lors de la transformation des données en données binaires de 0101 (supposées être 98 99). Quelle table de codes le navigateur utilise pour ouvrir le fichier. page Web, le navigateur indiquera avec quelle table de codes soumettre les données. Une fois que les données ont atteint le serveur, les données (98 99) doivent être encapsulées dans la requête. L'appel de la méthode getParameter de la requête dans le servlet renvoie une chaîne ("Chine"). Après avoir obtenu le numéro dans la méthode, il doit l'être. converti en caractères. Assurez-vous de vérifier le code du tableau, puisque le concepteur de la requête est un étranger, la requête par défaut est ISO8859-1, qui est couramment utilisée par eux.
Copiez le code comme suit :
paquet com.yyz.request ;
importer java.io.IOException ;
importer java.io.PrintWriter ;
importer javax.servlet.ServletException ;
importer javax.servlet.http.HttpServlet ;
importer javax.servlet.http.HttpServletRequest ;
importer javax.servlet.http.HttpServletResponse ;
// Soumettre le formulaire en mode post
la classe publique RequestDemo étend HttpServlet {
public void doGet (demande HttpServletRequest, réponse HttpServletResponse)
lance ServletException, IOException {
//Problème tronqué en chinois des données de requête
request.setCharacterEncoding("UTF-8");//Nous contrôlons la page Web du client pour qu'elle soit UTF-8
String nom d'utilisateur = request.getParameter("nom d'utilisateur");
//Obtenir des données est normal, vous pouvez vérifier différentes tables de codes lors de la sortie des données
réponse.setCharacterEncoding("gb2312");//Notifier le serveur de la table de codes à consulter lors de l'envoi des données
réponse.setContentType("text/html;charset=gb2312");//Informer le navigateur avec quelle table de codes ouvrir
PrintWriter out = réponse.getWriter();
out.write(nom d'utilisateur);
}
public void doPost (demande HttpServletRequest, réponse HttpServletResponse)
lance ServletException, IOException {
doGet (demande, réponse);
}
2 : Le formulaire soumet les données au premier plan en mode get :
Les données soumises dans la méthode get sont toujours envoyées à l'aide de la table de codes utilisée par le navigateur pour les ouvrir. La différence est que lors de la soumission de données en mode get, le codage des paramètres de requête n'est pas valide. Même si UTF-8 est défini, ISO8859-1 sera toujours vérifié. Obtenez (??). Pour résoudre ce problème, vous devez utiliser (??) pour vérifier ISO8859-1 à l'envers. Après avoir obtenu (98 99), vérifiez la table de codes correcte.
Copiez le code comme suit :
paquet com.yyz.request ;
importer java.io.IOException ;
importer java.io.PrintWriter ;
importer javax.servlet.ServletException ;
importer javax.servlet.http.HttpServlet ;
importer javax.servlet.http.HttpServletRequest ;
importer javax.servlet.http.HttpServletResponse ;
// Soumettez le formulaire via la méthode get
la classe publique RequestDemo étend HttpServlet {
public void doGet (demande HttpServletRequest, réponse HttpServletResponse)
lance ServletException, IOException {
//Problème tronqué en chinois des données de requête
request.setCharacterEncoding("UTF-8");//Lors de la soumission de données en mode obtenir, l'encodage du paramètre de requête n'est pas valide. Même si UTF-8 est défini, ISO8859-1 sera toujours vérifié.
String nom d'utilisateur = request.getParameter("nom d'utilisateur");
System.out.println(nom d'utilisateur);
source d'octets [] = nom d'utilisateur.getBytes("iso8859-1");
nom d'utilisateur = nouvelle chaîne (source, "UTF-8");
System.out.println(nom d'utilisateur);
}
public void doPost (demande HttpServletRequest, réponse HttpServletResponse)
lance ServletException, IOException {
doGet (demande, réponse);
}
}
Troisième : Résumé du problème des caractères chinois tronqués dans les données soumises :
1. Si la méthode de soumission est post, il vous suffit de définir le codage de l'objet de la requête si vous souhaitez éviter les caractères tronqués.
Remarque : La manière dont les données client sont soumises dépend du codage sur lequel la demande doit être définie.
2. Si la méthode de soumission est get, la définition du codage de l'objet de requête n'est pas valide. Si vous souhaitez éviter les caractères tronqués, vous ne pouvez le convertir que manuellement.
Données de chaîne = "???????";//chaîne tronquée
byte source [] = data.getBytes("iso8859-1");//Obtenir les données originales soumises par le client
data = new String (data.getBytes("iso8859-1"),"UTF-8");//résoudre les caractères tronqués
//Égal à
data = nouvelle chaîne (source, "UTF-8");
3. Le code tronqué dans la méthode get peut également être obtenu en modifiant la configuration du serveur. Modifiez le fichier server.xml dans le répertoire conf de Tomact.
3.1
Cette approche n'est pas recommandée car elle modifie le serveur et n'est pas flexible.
3.2
Après ce paramètre, quel que soit l'encodage défini par setCharacterEncoding de la requête, il sera utilisé par le connecteur. Bien qu'il soit plus flexible que le changement précédent, cela rendra toujours notre application fortement dépendante du serveur et n'est pas recommandé.
Quatrièmement : Enfin, permettez-moi de mentionner un petit détail : si l'adresse URL est suivie de données chinoises, elle doit être codée en URL. Les paramètres soumis dans le formulaire incluent des données chinoises et le navigateur nous aidera automatiquement à les coder. Cependant, si les paramètres chinois sont directement importés via le lien, le navigateur ne nous aidera pas à les coder. Dans ce cas, nous voulons résoudre. le problème des caractères chinois tronqués via la deuxième méthode ci-dessus. Cela ne fonctionne parfois pas. Vous devez d'abord l'encoder via URLEncoding.encode(,"UTF-8").