Heim  >  Fragen und Antworten  >  Hauptteil

Es besteht ein wenig Zweifel daran, wie der Servlet-Filter in Java das Problem der verstümmelten chinesischen Zeichen löst. Ist hier die Verwendung von EntrySet-Traversal erforderlich?

Der Filtercode zur Lösung des Problems verstümmelter chinesischer Zeichen im Internet enthält einen Absatz ähnlich dem folgenden:

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;  

Hier ändern wir nur den in der Karte festgelegten Wert. Dieser Wertesatz ist eine Sammlung von String-Arrays. Tatsächlich ändern wir nur die Elemente im String-Array. Ich habe das Gefühl, dass es nicht nötig ist, den Eintragssatz herauszunehmen und ihn zu durchlaufen. Sie können den gleichen Effekt erzielen, indem Sie einfach die Werte herausnehmen und ihn durchlaufen. Ich habe es selbst geübt und meine Vermutung bestätigt. Aber fast alle Informationen, die ich im Internet sehe, durchlaufen EntrySet. Warum ist das so? Gibt es Lücken beim bloßen Durchlaufen der Wertesatzwerte? Ich hoffe, dass die Experten die Verwirrung aufklären können!

習慣沉默習慣沉默2702 Tage vor1037

Antworte allen(2)Ich werde antworten

  • 淡淡烟草味

    淡淡烟草味2017-05-27 17:43:44

    你的意思是这样吧:

    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));
        }
    }
    

    我觉得没啥不可以的呀。

    Antwort
    0
  • 给我你的怀抱

    给我你的怀抱2017-05-27 17:43:44

    完全没有必要,见Tomcat的SetCharacterEncodingFilter的源码

    request.setCharacterEncoding(...)

    Antwort
    0
  • StornierenAntwort