之前一直以为我们搞定了中文,所以一直没有怀疑我们的配置,今天和立国发现一个问题:
就是用ajax的方式去创建一个记录,然后用jsp的方式去取数据,出现乱码;
但是用ajax的方式取此记录,正常;
后来发现,我们提交数据的方式,不管是ajax的,还是form表单提交,所使用的编码通通没有指定!!,虽然我们在页面上加上了<%@
page contentType="text/html;charset=UTF-8" language="java"
%>,但这一句主要是负责response的数据显示;
查了资料后才发现需要加上:<%@
page pageEncoding="utf-8"
%>;
而之前我们都没有指定request的charset,所以按照servlet标准,大多数web
server(Resin,Tomcat)默认按照iso-8859-1来处理,而我们的数据库是utf-8的,所以放到数据库中的数据并不是utf-8的;所以用jsp显示时候出错;但用ajax的方式为什么没出错,还没有搞明白;
解决方案:
1.ajax方式
#1:prototype.js
[line707]contentType:
'application/x-www-form-urlencoded;charset=UTF-8',
#2:BaseController
[line135] response.setCharacterEncoding("UTF-8");
以上两行保证了ajax请求和相应的方式一致,并都是utf8;
2.form表单方式;
#3:在jsp加上:<%@ page
pageEncoding="utf-8" %>;
#4:和<%@ page
contentType="text/html;charset=utf-8" language="java"
%>
3.我在web。xml中加了一个encodefilter,保证了当请求中没有指定charset的时候,使用utf-8方式,所以以上#1和#3处的指定charset是可选的!!
请大家注意更新以上3个文件;prototype.js,BaseController
.java, web.xml
同意以上所述,更新3个文件:prototype.js,
BaseController.java, web.xml ,顶。