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应用程序中发现了这个问题。
答案 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
}
}