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有什么漏洞嗎?望高手解惑!
問題解答
回答1:你的意思是這樣吧:
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)); }}
我覺得沒啥不可以的呀。
回答2:完全沒有必要,見Tomcat的SetCharacterEncodingFilter的源碼
request.setCharacterEncoding(...)
![css3 - [CSS] 動畫效果 3D翻轉bug](http://www.cgvv.com.cn/attached/image/news/202304/110831f073.png)