首頁  >  問答  >  主體

java中servlet過濾器解決中文亂碼問題的一絲疑惑,這裡一定要用entrySet遍歷嗎?

網路上查到的關於解決中文亂碼問題的過濾器程式碼中都有類似下面的這一段:

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;  

這裡只是修改了map裡面的值集,此值集是String陣列的集合,實際上只是修改了String陣列裡的元素。我覺得這裡沒有必要取出entrySet並遍歷,只用取出Values並遍歷就可以達到同樣的效果,我親自實踐了一下也證實我的猜想。但我在網路上看到的資料幾乎都是遍歷entrySet,這是為什麼?只遍歷值集Values有什麼漏洞嗎?望高手解惑!

習慣沉默習慣沉默2702 天前1038

全部回覆(2)我來回復

  • 淡淡烟草味

    淡淡烟草味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));
        }
    }
    

    我覺得沒啥不可以的呀。

    回覆
    0
  • 给我你的怀抱

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

    完全沒有必要,請參閱Tomcat的SetCharacterEncodingFilter的源碼

    request.setCharacterEncoding(...)

    回覆
    0
  • 取消回覆