我试图将一个包含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>
我可以使其工作的唯一两种方法是使用Jetty或将其切换为method =“ get”。两者都会导致字符顺利通过。
我<Connector>在server.xml中有URIEncoding =“ UTF-8”
这仅与GET请求相关。
动作调用的第一个过滤器request.setCharacterEncoding("UTF-8");
request.setCharacterEncoding("UTF-8");
很好,这应该适用于POST请求。你只需要确保,如果你还没有叫getParameter(),getReader(),getInputStream()或其他任何这将触发解析请求主体 之前 调用setCharacterEncoding()。
getParameter()
getReader()
getInputStream()
setCharacterEncoding()
包含表单的页面的内容类型为"text/html; charset=UTF-8"
"text/html; charset=UTF-8"
__您 如何 精确设置?如果在中完成<meta>,那么您需要了解,当页面通过HTTP服务并且存在HTTP 响应标头时,浏览器会 忽略 此操作Content-Type。默认情况下,普通Web服务器已经设置好了。该<meta>内容类型时,将页面保存到本地磁盘,并从那里看,然后才能使用。
<meta>
Content-Type
要正确设置响应头字符集,请在JSP顶部添加以下内容:
<%@page pageEncoding="UTF-8" %>
顺便说一句,这还将告诉服务器以给定的字符集发送响应。
在表单中添加“接受字符集”没有区别
它仅在MSIE中有所不同,但即使如此,它还是错误地使用了它。无论如何,整个属性毫无价值。算了吧。