Dites que j'ai une chaîne avec "é" dedans, et je veux l'envoyer via une URL au contrôleur suivant, les caractères sont encodés en% C3% A9, et quand il est reçu en l'autre contrôleur, il est décodé pour "Ã ©". Ma question est, comment encoder le "é" sur l'URL ainsi quand il est reçu dans l'autre contrôleur il est décodé à "é"? Pour l'instant, je les remplace manuellement. J'ai besoin d'un moyen de le faire automatiquement et avec n'importe quel caractère spécial (éèà ...) Merci.Envoyer des caractères spéciaux via l'URL Java
Répondre
Malheureusement, il n'existe aucun moyen de déclarer le codage des données d'URL. L'encodage commun utilisé pour être ISO-8859-1 ou Latin1, mais de nos jours, UTF-8 est souvent utilisé dans les nouveaux développements. La raison en est que la spécification de servlet indique que lorsque le charset n'est pas spécifié, ISO-8859-1 est implicite, mais HTML 4.0 recommande UTF-8 pour les URL. Le problème est que l'URL est composée d'octets et que le conteneur de servlet le convertit en caractères java avant de le transmettre à l'application, vous devez donc déclarer le jeu de caractères utilisé au niveau du conteneur de servlet. Pour des raisons de compatibilité, le célèbre Tomcat avant la version 8.0 a supposé par défaut un jeu de caractères Latin1 pour l'URL. Depuis la version 8.0.0, la valeur par défaut dépend maintenant du paramètre "Conformité strict des servlets". Il est certifié ISO-8859-1 lorsque vrai et UTF-8 quand faux
Références:
- What character set should I assume the encoded characters in a URL to be in?
- Tomcat FAQ/CharacterEncoding
Pour votre question précise, vous avez deux façons pour traiter correctement le caractère é
:
- laisser votre configuration de conteneur de servlet inchangé et encode l'URL dans la norme ISO-8859-1 (
é
sera%E9
) - bâton UTF-8 dans l'URL, mais déclarer au conteneur de servlet
[ ' URLEncoder'] (https://docs.oracle.com/javase/7/docs/api/java/net/URLEncoder.html) et ['URLDecoder'] (https://docs.oracle.com/javase/7 /docs/api/java/net/URLDecoder.html)? – KarelG
Copie possible de [HTTP URL Address Encoding en Java] (https://stackoverflow.com/questions/724043/http-url-address-encoding-in-java) –