UTF-8使用Tomcat编码servlet表单提交

时间:2011-12-05 20:50:03

标签: java tomcat servlets utf-8 jetty

我正在尝试将包含unicode字符的简单表单发布到servlet操作。在Jetty上,一切都没有障碍。在Tomcat服务器上,utf-8字符会被破坏。

我得到的最简单的案例:

形式:

<form action="action" method="post">
  <input type="text" name="data" value="It’s fine">`
</form>`

动作:

class MyAction extends ActionSupport {   
  public void setData(String data) {
    // data is already mangled here in Tomcat
  } 
}
  • 我在server.xml中的<Connector>上有URIEncoding =“UTF-8”
  • 操作的第一个过滤器调用request.setCharacterEncoding(“UTF-8”);
  • 包含表单的页面的内容类型为“text / html; charset = UTF-8”
  • 在表单中添加“accept-charset”没有区别

我能使其工作的唯一两种方法是使用Jetty或将其切换为method =“get”。这两个都会导致角色顺利通过。

1 个答案:

答案 0 :(得分:16)

  

我在server.xml中的<Connector>上有URIEncoding =“UTF-8”

这仅与GET请求有关。


  

操作的第一个过滤器调用request.setCharacterEncoding("UTF-8");

很好,这应该适用于POST请求。您只需要确保在调用{之前未调用getParameter()getReader()getInputStream()或其他会触发解析请求正文的其他内容时{1}}。


  

包含表单的页面的内容类型为setCharacterEncoding()

如何设置?如果在"text/html; charset=UTF-8"中完成,那么当页面通过HTTP提供并且存在HTTP <meta>响应标头时,您需要了解浏览器忽略。平均网络服务器默认已经设置了它。只有当页面保存到本地磁盘并从那里查看时,才会使用Content-Type内容类型。

要正确设置响应标头字符集,请将以下内容添加到JSP的顶部:

<meta>

顺便提一下,这也会告诉服务器在给定的字符集中发送响应。


  

在表单中添加“accept-charset”没有区别

它只会对MSIE产生影响,但即便如此,它也会错误地使用它。无论如何,整个属性都是毫无价值的。算了吧。

另见: