如果根本没有正确设置请求和/或响应编码,就会发生这种情况。
对于 GET 请求,您需要在 servletcontainer 级别对其进行配置。目前尚不清楚您使用的是哪一个,但例如 Tomcat,这将URIEncoding
通过<Connector>
其/conf/server.xml
.
<Connector ... URIEncoding="UTF-8">
对于 POST 请求,您需要创建一个过滤器,该过滤器映射到涵盖所有这些 POST 请求的所需 URL 模式。例如*.jsp
,甚至/*
。做以下工作doFilter()
:
request.setCharacterEncoding("UTF-8");
chain.doFilter(request, response);
对于 HTML 响应和提交的 HTML 表单输入值的客户端编码,您需要设置 JSP 页面编码。将此添加到 JSP 的顶部(鉴于显示 UTF-8 直接格式 DB 可以正常工作,您可能已经正确完成了它)。
<%@page pageEncoding="UTF-8" %>
或者为了防止在每个 JSP 上复制粘贴,请在以下位置配置一次web.xml
:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
对于源代码文件和标准输出(IDE 控制台),您需要设置 IDE 工作区编码。目前尚不清楚您使用的是哪一个,但例如 Eclipse,通过将Window > Preferences > General > Workspace > Text File Encoding设置为 UTF-8 来完成。
请注意,通过 HTTP 提供页面时会忽略<meta http-equiv>
HTML标记。只有当页面通过本地磁盘文件系统打开时才考虑。也不需要指定,因为它已经默认为在使用表单提供 HTML 页面期间使用的响应编码。另请参阅W3 HTML 规范。file://
<form accept-charset>
也可以看看: