我有一个在 Apache Tomcat 上运行 Servlet 2.4 的 java web 项目。
在我的 servlet 中,我设置了 request.setCharacterEncoding("utf-8")
并使用 <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
在 HTML head 标签中。
项目中的所有文件(Java、JS 等)都将文本文件编码设置为 utf-8
。我还添加了一个映射到 web.xml
中所有 Servlet 的过滤器它将字符编码设置为 utf-8
。
当向我使用 jQuery 的 Web 服务器发出 ajax 请求(get 和 post)以及 html 表单上的序列化方法时,Servlet 无法检索特殊的 utf-8
人物。
也许是因为它期望 UTF-8
并获取 URL 编码的字符串?有人对此有任何建议吗?
最佳答案
using the
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
in HTML head tag.
元http-equiv
当 HTML 页面本身由真正的 HTTP 请求提供服务时,HTML header 中的标记将被忽略。相反,使用 HTTP 响应 header 中提供的信息。元http-equiv
仅当页面未通过 http://
作为 HTTP 资源获取时才使用标签URI,例如通过 file://
访问本地磁盘文件系统URI,当最终用户将获取的 HTML 文件保存到磁盘文件系统并通过文件资源管理器从那里重新打开它时,可能会发生这种情况。
您现在应该可能意识到为什么该属性的调用方式完全相同:http-equiv
,如“HTTP 等效项”中所示。
因此,您需要在真实的HTTP响应头中设置内容类型和字符编码。这可以通过将以下行放在 JSP 顶部来完成:
<%@page pageEncoding="UTF-8"%>
或者,如果您打算将其应用到 Web 应用程序的所有 JSP 上的一个位置,而不是在所有文件上复制粘贴相同内容,则将以下内容放入 Web 应用程序的 web.xml
中:
<jsp-config>
<jsp-property-group>
<url-pattern>*.jsp</url-pattern>
<page-encoding>UTF-8</page-encoding>
</jsp-property-group>
</jsp-config>
请注意,我假设您以正确的方式发送 jQuery ajax 请求,并且您使用例如正确的 URI 编码参数$.serialize()
或encodeURIComponent()
.
另请参阅:
关于java - Ajax 到 Servlet,URI 编码的查询字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19006021/