Maison > Questions et réponses > le corps du texte
Le code de filtre pour résoudre le problème des caractères chinois tronqués trouvés sur Internet contient un paragraphe similaire au suivant :
Map<String,String[]> map = request.getParameterMap();//获取有乱码的map
if(isNotEncode){//只能在第一次解决乱码
for(Map.Entry<String, String[]> entry : map.entrySet()){//遍历map,解决所有值的乱码
String [] vs = entry.getValue();
for(int i=0;i<vs.length;i++){
vs[i] = new String(vs[i].getBytes("iso8859-1"),encode);
}
}
isNotEncode = false;//设置为false,第二次就不会再进这个代码块了
}
return map;
Ici, nous modifions uniquement la valeur définie dans la carte. Cet ensemble de valeurs est une collection de tableaux String. En fait, nous modifions uniquement les éléments du tableau String. Je pense qu'il n'est pas nécessaire de retirer l'entrySet et de le parcourir. Vous pouvez obtenir le même effet en supprimant simplement les valeurs et en les parcourant. Je l'ai pratiqué moi-même et j'ai confirmé ma conjecture. Mais presque toutes les informations que je vois sur Internet passent par EntrySet. Pourquoi ? Y a-t-il des failles dans le simple franchissement des valeurs définies ? J'espère que les experts pourront dissiper la confusion !
淡淡烟草味2017-05-27 17:43:44
Voici ce que tu veux dire :
for (String[] values : map.values()) {
for (int i = 0; i < values.length; i ++) {
values[i] = new String(values[i].getBytes(StandardCharsets.ISO_8859_1, encode));
}
}
Je ne pense pas qu’il y ait quelque chose de mal à cela.
给我你的怀抱2017-05-27 17:43:44
Complètement inutile, voir le code source du SetCharacterEncodingFilter de Tomcat
request.setCharacterEncoding(...)