如果请求和/或响应编码根本没有正确设置,则可能会发生这种情况。
对于 GET 请求,您需要在 servlet 容器级别进行配置。目前尚不清楚您使用的是哪一个,但例如 Tomcat 是由URIEncoding
属性在<Connector>
其中的元素/conf/server.xml
.
<Connector ... URIEncoding="UTF-8">
对于 POST 请求,您需要创建一个filter它映射到涵盖所有这些 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>
对于源代码文件和stdout(IDE控制台),您需要设置IDE工作区编码。目前尚不清楚您使用的是哪一个,但对于示例 Eclipse,可以通过设置来完成窗口 > 首选项 > 常规 > 工作区 > 文本文件编码为 UTF-8。
请注意 HTML<meta http-equiv>
标签是ignored当页面通过 HTTP 提供时。仅当通过本地磁盘文件系统打开页面时才考虑file://
。还指定<form accept-charset>
是不必要的,因为它已经默认使用在使用表单提供 HTML 页面期间使用的响应编码。也可以看看W3 HTML 规范.
也可以看看:
- Unicode - 如何获得正确的字符?
- 为什么 POST 不支持字符集,而 AJAX 请求则支持?雄猫6
- HTML:表单不发送 UTF-8 格式输入
- Servlet 应用程序中的 Unicode 字符显示为问号
- 写入数据库时UTF-8编码错误(读取正常)