2 回答
TA贡献1856条经验 获得超11个赞
第一点要明确,ajax 发送的中文是以什么 编码(GBK 或utf-8 或 iso-8859-1)发送给后台servlet 的,
第二点,当后台接受到 ajax发过来的请求时,你要设置 用什么编码去解析 ajax发送过来的数据
request.setCharacterEncoding("???");
上2步弄明白了,就不会出现乱码。
第一, ajax 发送字符的编码是由这个网页所决定的,这个网页的字符编码是 UTF-8,那么 ajax发送的字符就以 utf-8 发送到后台(不过 form表单里面的有个属性可以设置以什么字符编码发送给后台)。你在页面知道是 UTF-8编码(或者用 document.charset 获取编码),但是 后台不知道,所以,在ajax中设置一个 charset属性为 utf-8(xmlHttp.setRequestHeader("Context-Type", "Charset=UTF-8");),告诉后台 发过来的是 utf-8编码的字符,
第二,上面说到 http请求中 charset 属性指明编码为 utf-8,但是,服务器不会给你自动转换,默认都是使用 iso-8859-1(谁叫服务器都是老外开发的,他们根本都没想到这玩儿会流行全世界,会有各种各样的字符编码,不过提供了一个方法让我们自己设置编码也算高明的了),所以后台页面要你自己获取这个值,然后 设置转换编码
request.setCharacterEncoding("UTF-8");
TA贡献1828条经验 获得超6个赞
有几个方法吧,第一
在首选项里面把默认jsp页面编码格式改为UTF-8.具体设置方法可百度,参考我的<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>(其他格式的也行。个人爱UTF-8)
第二,
在servlet中加上这么一句话,response.setContentType("text/html");request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("utf-8");可能是这个问题的概率大。(注:会设置项目全部去过滤则不用这么麻烦一般这样也行)。
第三
转换全球通用格式。比如a=您好就可以转换为a=\u60A8\u597D。把后面那个字母数字的东西放到哪里也不会乱码。转换软件JDK目录下有。不会可百度。详细的就不说了。自己查查长知识吧。
以上三种方法基本可以解决全部乱码问题。
添加回答
举报