一尘不染

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

tomcat

我试图将一个包含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
  } 
}
  • <Connector>在server.xml中有URIEncoding =“ UTF-8”
  • 该操作上的第一个过滤器调用request.setCharacterEncoding(“ UTF-8”);
  • 包含表单的页面的内容类型为“ text / html; charset = UTF-8”
  • 在表单中添加“接受字符集”没有区别

我可以使其工作的唯一两种方法是使用Jetty或将其切换为method =“ get”。两者都会导致字符顺利通过。


阅读 280

收藏
2020-06-16

共1个答案

一尘不染

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

这仅与GET请求相关。


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

很好,这应该适用于POST请求。你只需要确保,如果你还没有叫getParameter()getReader()getInputStream()或其他任何这将触发解析请求主体
之前 调用setCharacterEncoding()


包含表单的页面的内容类型为"text/html; charset=UTF-8"

__您 如何 精确设置?如果在中完成<meta>,那么您需要了解,当页面通过HTTP服务并且存在HTTP 响应标头时,浏览器会 忽略
此操作Content-Type。默认情况下,普通Web服务器已经设置好了。该<meta>内容类型时,将页面保存到本地磁盘,并从那里看,然后才能使用。

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

<%@page pageEncoding="UTF-8" %>

顺便说一句,这还将告诉服务器以给定的字符集发送响应。


在表单中添加“接受字符集”没有区别

它仅在MSIE中有所不同,但即使如此,它还是错误地使用了它。无论如何,整个属性毫无价值。算了吧。

也可以看看:

2020-06-16