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 – 如何使角色正确?