我有一个在Apache Tomcat上运行Servlet 2.4的java web项目。
在我的servlet中,我设置了request.setCharacterEncoding("utf-8")
并使用HTML头标记中的<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
。
项目中的所有文件(Java,JS等)都将文本文件编码设置为utf-8
。我还添加了一个映射到web.xml
中所有Servlet的过滤器,它将字符编码设置为utf-8
。
当我向使用jQuery的web服务器和html表单上的serialize方法发出ajax请求(get和post)时,Servlet无法检索特殊的utf-8
个字符。
也许是因为它期望UTF-8
并获取URLencoded字符串?有没有人有任何关于此的提示?
答案 0 :(得分:2)
当HTML页面本身由真正的HTTP请求提供服务时,HTML头中的使用HTML标头中的
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
。
元http-equiv
标记被忽略。而是使用HTTP响应头中提供的信息。元http-equiv
标记仅在未通过http://
URI作为HTTP资源获取页面时使用,例如本地磁盘文件系统通过file://
URI,这可能发生在enduser将获取的HTML文件保存到磁盘文件系统,并通过文件浏览器从那里重新打开。
您现在应该可以理解为什么要调用该属性:http-equiv
,如“HTTP等效”。
因此,您需要在真实的HTTP响应头中设置内容类型和字符编码。这可以通过将以下行放在JSP的顶部来完成:
<%@page pageEncoding="UTF-8"%>
或者,如果您打算在一个地方将所有JSP应用于您的webapp,而不是对所有文件进行同步,那么请将以下内容放在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请求,并且您使用例如正确的URI编码参数。 $.serialize()
或encodeURIComponent()
。
答案 1 :(得分:0)
执行jQuery.ajax
时使用此contentType:
contentType (default: 'application/x-www-form-urlencoded; charset=UTF-8')