在web应用中,包括浏览器、web服务器、web应用程序中和数据库等部分,每一部分使用的不同的字符集,是的字符数 据在字符集之间传递时出现中文乱码问题。
首先看为什么会出现乱码问题:
常见的乱码解决方案:
-
JSP/Servlet主要的几种编码方式 (前两个只使用于JSP,而后两个适用于JSP和Servlet)
-
PageEncoding=” ” 作用是设置jsp编译成servlet时使用的编码
-
contentType=“text/html;charset=”””的作用对服务器响应进行重新编码
-
Request.setCharacterEncoding(”utf-8”)作用是对客户端请求进行重新编码
-
Response.setCharacterEncoding(“”)的作用指定服务器端响应客户端请求进行重新编码
说明:JSP转化成servlet文件时,若没有指定编码方式,则将按照JVM的默认编码进行编码,如果该编码不支持中文,则在这块就出现乱码问题。
-
2. Java web开发中文乱码问题
2.1 页面显示乱码包括浏览器显示出现乱码、后台在生成界面的时候,其内容本身就乱码
2.1.1 若为浏览器显示乱码,需要设置JSP或Servlet的contentType的属性
-
2.1.2 Servlet生成界面本身就乱码:
可以在输出页面之前调用response的setContentType方法
2.2用户提交的数据是乱码
2.2.1 表单用post方式提交数据,所以要设置请求对象的字符编码 Request.setCharacterEncoding(“”)
在响应页面使用 response.setCharacterEncoding(“”)
说明: 如果处理的页面较多时可以使用过滤器进行处理,这里建议使用过滤器解决。
2.2.2 表单中使用get方式提交数据或者通过URL提交的数据,只在接收数据的JSP文件或Servlet文件中设置request.setCharacterRncoding()是不行的。因为tomcat默认用iso8859对URL提交数据进行编码的。这是需要修改tomcat的servlet.xml文件在Port号为8080的connector元素增加一个属性URLEncoding=”utf-8”.
注意: get是把参数数据队列加到提交表单的ACTION属性所指的URL中,值和表单内各个字段一一对应,在URL中可以看到。
post是通过HTTP post机制,将表单内各个字段与其内容放置在HTML HEADER内一起传送到ACTION属性所指的URL地址,用户是看不到的。
2.2.3数据库中数据是乱码
以mysql5.0为例
1.向表中插入中文,先把中文字符编码转化为iso8859-1编码,然后再插入到表中。读取的时候把数据库中的内容转化为gb2312编码在进行读取。
2.修改mysql的配置文件,打开MySQL——home下的my.init文件,把mysqld区的语句defaulr-characterset=….修改为defaulr-characterset=GB2312,
在[client] 区增加defaulr-characterset=‘GB2312’修改后数据库默认支持的编码格式就被改为gb2312.
-
4.ajax请求的乱码问题
如果使用ajax出现了乱码问题这样解决:前端ajax函数的请求的url里面中文参数用两个encodeURI()函数处理,var url = "user.do?p=checkUser&name=" + encodeURI(encodeURI(username.value));而服务器端则用 URLDecoder.decode()函数去接收,string userName = URLDecoder.decode(request.getParameter("name"),"utf-8"); 这样就能够解决ajax请求中乱码的问题了。