Habituellement, nous encodons une fois, puis acceptons les paramètres directement
String para = request.getParameter(paramName); C'est parce que le conteneur peut automatiquement décoder (DECODE) pour nous
De manière générale, lors de l'encodage, UTF-8 (encodage système) est utilisé si UTF-8 est également utilisé lors du décodage, alors les caractères tronqués légendaires n'apparaîtront pas ~.
Cependant, si UTF-8 est utilisé dans la page JSP, mais que d'autres encodages sont utilisés lors du décodage du conteneur, des caractères tronqués peuvent apparaître.
À ce stade, vous pouvez généralement utiliser :
String param = new String(request.getParameter(paramName).getBytes("ISO-8859-1"),"UTF-8");
Peut aussi sortir.
J'ai essayé tous les moyens. Que dois-je faire si je n'arrive toujours pas à comprendre ?
Comment résoudre ce problème d'encodage causé par plusieurs serveurs :
Supposons que la chaîne : = "Yang" ;
Encoder une fois%E9%98%B3
Encoder deux fois%2525E9%252598%2525B3
Dans un deuxième temps, le conteneur décode automatiquement cette fois, qu'il s'agisse de GBK, UTF-8 ou ISO-8859-1, il peut obtenir correctement %E9%98%B3.
Ensuite, tant que vous effectuez le décodage une fois, vous pouvez obtenir "Yang".