0

我有一个在 Apache Tomcat 上运行 Servlet 2.4 的 java web 项目。

在我的 servlet 中,我设置request.setCharacterEncoding("utf-8")并使用了<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">in HTML head 标记。

项目中的所有文件(Java、JS 等)都将文本文件编码设置为utf-8. 我还添加了一个映射到所有 Servlet 的过滤器,web.xml其中将字符编码设置为utf-8.

当向我使用 jQuery 的 Web 服务器和 html 表单上的序列化方法发出 ajax 请求(get 和 post)时,Servlet 无法检索特殊utf-8字符。

也许是因为它期望UTF-8并获取 URLencoded 字符串?有没有人对此有任何提示?

4

2 回答 2

2

使用<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">in HTML head 标签。

当 HTML 页面本身由真正的 HTTP 请求提供服务时, HTML 头部中的元http-equiv标记将被忽略。而是使用 HTTP 响应标头中提供的信息。元http-equiv标记仅在页面不是通过 URI 获取为 HTTP 资源时使用http://,例如通过 URI 获取本地磁盘文件系统file://,当最终用户将获取的 HTML 文件保存到磁盘文件系统并从那里重新打开时可能会发生这种情况通过文件资源管理器。

您现在可能应该明白为什么该属性被这样调用了:http-equiv,就像在“HTTP 等价物”中一样。

所以,你需要在真实的 HTTP 响应头中设置内容类型和字符编码。这可以通过在 JSP 顶部放置以下行来完成:

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

或者,如果您打算将它应用到 webapp 的所有 JSP 上,而不是在所有文件中复制粘贴相同的内容,则将以下内容放入 webapp 中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 请求,并且您正在使用 eg$.serialize()或正确地对参数进行 URI 编码encodeURIComponent()

也可以看看:

于 2013-09-25T13:33:39.123 回答
0

执行时使用此 contentType jQuery.ajax

contentType (default: 'application/x-www-form-urlencoded; charset=UTF-8')

更多细节在这里:http ://api.jquery.com/jQuery.ajax/

于 2013-09-25T13:20:25.463 回答