UTF-8使用Tomcat编码servlet表单提交
我试图将一个包含unicode字符的简单表单发布到servlet操作。 在Jetty上,一切都没有障碍。 在Tomcat服务器上,utf-8字符会被破坏。
我得到的最简单的案例:
形成:
`
行动:
class MyAction extends ActionSupport { public void setData(String data) { // data is already mangled here in Tomcat } }
- 我在server.xml中的
上有URIEncoding =“UTF-8”
- 动作的第一个filter调用request.setCharacterEncoding(“UTF-8”);
- 包含表单的页面的内容类型是“text / html; charset = UTF-8”
- 在表单中添加“accept-charset”没有任何区别
我能使其工作的唯一两种方法是使用Jetty或将其切换为method =“get”。 这两个都导致角色没有问题。
我在server.xml中的
上有URIEncoding =“UTF-8”
这只与GET请求有关。
动作的第一个filter调用
request.setCharacterEncoding("UTF-8");
好的,应该适用于POST请求。 您只需确保在调用getReader()
之前未调用getParameter()
, getReader()
, getInputStream()
或其他任何会触发解析请求体的内容。
包含表单的页面的内容类型是
"text/html; charset=UTF-8"
你究竟是如何设置它的? 如果在 ,那么您需要了解当页面通过HTTP提供并且存在HTTP
Content-Type
响应头时,浏览器会忽略它。 平均网络服务器默认已经设置了它。 然后,只有在将页面保存到本地磁盘并从那里查看时才会使用内容类型。
要正确设置响应头字符集,请将以下内容添加到JSP的顶部:
<%@page pageEncoding="UTF-8" %>
顺便说一下,这也会告诉服务器在给定的字符集中发送响应。
在表单中添加“accept-charset”没有任何区别
它只会在MSIE中产生差异,但即便如此,它也会错误地使用它。 无论如何,整个属性都毫无价值。 算了吧。
也可以看看:
- Unicode – 如何使角色正确?