request.getParamaterValues()在request.getParameter()时不支持UTF-8

时间:2014-11-17 16:31:03

标签: java servlets encoding utf-8

HTML UTF-8页面(<meta content="text/html; charset=utf-8" http-equiv="Content-Type"/>)正在使用具有单值和多值字段的表单。

使用request.getParameter(NAME)发送特殊字符(例如äöü)的单值字段工作正常。

但是,如果您使用多值字段并尝试通过request.getParameterValues(MULTI)接收值,则特殊字符无法正确解码。

这是servlet规范中的错误,特别是在getParameterValues()方法中还是我遗漏了什么?

我在Tomcat 5和Java SE 6上运行的Web应用程序中发现了这个问题。

1 个答案:

答案 0 :(得分:0)

与此同时,我得到了一个有效的解决方案(解决方法)。但是,我仍然感兴趣为什么直接的方法不起作用......

工作解决方案:

String[] strings = request.getParameterValues("multi");
if (strings != null) {
    if (response.getCharacterEncoding().equals("ISO-8859-1")) {
        for (int i=0; i<strings.length; i++) {
            strings[i] = URLDecoder.decode(new String(strings[i].getBytes("ISO-8859-1"), "UTF-8"), "UTF-8");
        }
    }
    for (String s: strings) {
        // do whatever you want with correctly encoded special characters
    }
}

不起作用的代码(但应该?):

String[] strings = request.getParameterValues("multi");
if (strings != null) {
    for (String s: strings) {
        // special characters in variable s do not appear correctly
    }
}