java中servlet過濾器解決中文亂碼問題的一絲疑惑,這里必須要用entrySet遍歷嗎?
問題描述
網(wǎng)上查到的關(guān)于解決中文亂碼問題的過濾器代碼中都有類似下面的這一段:
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;//設(shè)置為false,第二次就不會(huì)再進(jìn)這個(gè)代碼塊了 } return map;
這里只是修改了map里面的值集,此值集是String數(shù)組的集合,實(shí)際只是修改了String數(shù)組里的元素。我感覺這里沒有必要取出entrySet并遍歷,只用取出Values并遍歷就可以達(dá)到同樣的效果,我親自實(shí)踐了一下也證實(shí)我的猜想。但是我在網(wǎng)上看到的資料幾乎都是遍歷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(...)
