0

网上查到的关于解决中文乱码问题的过滤器代码中都有类似下面的这一段:

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有什么漏洞吗?望高手解惑!

2个回答

0

你的意思是这样吧:

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

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

request.setCharacterEncoding(...)

撰写答案