在用Ajax向action发送请求时,如果传过去的中文参数或者返回的中文编码不是UTF8的话,会出现乱码。因为AJAX默认都是用UTF8发送的。
解决方案:
Ajax发送中文参数后台收到是乱码问题:
由于Ajax是按UTF8发送,那么在用get方法发送中文参数前要对中文进行编码,例如,
前台JS页面(GBK环境):
var idiomName = $(this).children().html();//得到汉字
idiomName =
encodeURI(idiomName);//进行编码,但是默认只能以UTF8方式进行编码
$.get("getInfo.do",{value:idiomName},function(data,status){}//传输转码后的中文
发送后,在后台接受时要再次进行转码,后台java文件(GBK环境):
request.setCharacterEncoding("GBK");
String value = request.getParameter("value");
value=java.net.URLDecoder.decode(value,"utf-8");//进行转码,注意这里也为UTF8
System.out.println(value);//正常的汉字
后台向Ajax请求返回的是中文,前台收到是乱码问题:
在PrintWriter out =
response.getWriter();前加上response.setContentType("text/plain;charset=GBK");
就可以保证返回的文本类型编码是GBK
response.setContentType("text/plain;charset=GBK");
PrintWriter out = response.getWriter();
out.write(str);
out.close();
其中response.setContentType()的String参数及对应类型包括:
value="image/bmp">BMP
value="image/gif">GIF
value="image/jpeg">JPEG
value="image/tiff">TIFF
value="image/x-dcx">DCX
value="image/x-pcx">PCX
value="text/html">HTML
value="text/plain">TXT
//普通文本
value="text/xml">XML
value="application/afp">AFP
value="application/pdf">PDF
value="application/rtf">RTF
value="application/msword">MSWORD
value="application/vnd.ms-excel">MSEXCEL
value="application/vnd.ms-powerpoint">MSPOWERPOINT
value="application/wordperfect5.1">WORDPERFECT
value="application/vnd.lotus-wordpro">WORDPRO
value="application/vnd.visio">VISIO
value="application/vnd.framemaker">FRAMEMAKER
value="application/vnd.lotus-1-2-3">LOTUS123