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?
習慣沉默
習慣沉默 2017-05-27 17:41:44
0
2
1065

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!

習慣沉默
習慣沉默

Antworte allen(2)
淡淡烟草味

你的意思是这样吧:

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

我觉得没啥不可以的呀。

给我你的怀抱

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

request.setCharacterEncoding(...)

Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage