ajax 请求servlet 响应 中文乱码

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ajax 请求servlet 响应 中文乱码相关的知识,希望对你有一定的参考价值。

使用ajax验证id是否重复,使用GET方式提交,提交的时候不涉及中文,请求到一个servlet上,servlet去数据库验证id是否重复,然后返回中文“id已经重复”,与数据库编码无关,在页面上显示却乱码
总之该设置的都设置了,该试的都试了:
response.setCharacterEncoding("GB18030");
response.setContentType("text/html;charset=GB18030");
java.net.URLEncode(); 也用了,tomcat编码也设置为了GB18030,浏览器也是GB18030,可是还是乱码,
到底是为什么?如何解决?

你项目的web.xml文件里面加了这个过滤器没有?

<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.action</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>追问

filter 设置了,

参考技术A servlet响应的结果先用java.net.URLEncoder处理一下 然后js里面再decode一下就行了追问

servlet:
String str = "物料代码重复";
URLEncoder.encode(str, "GB18030");
javascript
decode(xmlHttp.responseText);

是这样吗?我试了,还是不行

追答

还不行?,你用utf-8编码试试。

参考技术B 在 <system.web> 节点中配置 <globalization requestEncoding="gb2312" responseEncoding="gb2312" culture="zh-CN" fileEncoding="gb2312" /> 其他地方也换成gb2312

servlet请求编码与响应编码问题(编码不一致可能会导致乱码)

html中的编码

  <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">这里不设置成中文编码无法写中文。

jsp中的编码

  <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

  contentType="text/html; charset=UTF-8"是提供给浏览器的,pageEncoding="UTF-8"是服务器编译jsp时使用的,两者不一致可能会导致页面乱码,有时候可能不会乱码,最好保持一致。

servlet请求编码设置技术分享

  请求编码设置分两种,一种是get请求,在doGet方法获取请求参数的默认编码是ISO8859-1,无法获取中文,会出现乱码问题,用request.setCharacterEncoding("utf-8");设置编码不能解决,需要在server.xml的<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443"/>添加URIEncoding="utf-8",这样可以解决url后传中文参数问题。

  另一种是post请求,在doPost方法中用request.setCharacterEncoding("utf-8");就能解决post方法的中文传参乱码问题。

servlet响应编码设置

  响应编码get与post请求一样,用response.setContentType("text/html;charset=UTF-8");就可解决。

以上是关于ajax 请求servlet 响应 中文乱码的主要内容,如果未能解决你的问题,请参考以下文章

servlet请求编码与响应编码问题(编码不一致可能会导致乱码)

Java中 用ajax发出请求返回JOSN格式数据,中文乱码问题

Servlet 之请求,响应,缓存以及乱码

Servlet之中文乱码问题入门版

10秒后服务器响应时如何使用ajax发送请求?

Servlet 与静态页面数据交互中文乱码问题