问题描述:JSP页面的中文乱码问题产生的原因非常之多,下面给出解决思路和解决办法。
解决思路:JSP的流程是:页面->Servlet->数据库->Servlet->页面,所以一旦出现页面乱码,我们需要一步一步的判断。
1、首先是判断从页面到Servlet后乱码是否已经出现,怎么判断?很简单,在Servlet中获取页面参数后打印输出看一下。
2、如果Servlet中取到的参数没有出现乱码,而存入数据库后出现乱码,则说明数据库的编码格式不对。
3、如果数据里面是正确的中文,一般取出来就应该是正确的中文,这个时候如果返回页面乱码,则说明response中的设置有问题,也就是说返回页面的编码格式不对。
解决办法:
1、JSP->Servlet乱码
1.1 JSP页面部分
方法1:在JSP页面添加<%@ page="" pageencoding=“GB2312”><!–!–%@----><!–!–!–!–%@--------><!–!–!–%@------><!–_%@–>
作用:设置JSP文件自身的编码
方法2:在JSP页面添加<%@ page="" contenttype=“text/html; charset=GB2312”><!–!–%@----><!–!–!–!–%@--------><!–!–!–%@------><!–_%@–>
作用:设置JSP的输出流在浏览器中显示的编码
方法3:在JSP页面添加
作用:设置页面输入编码,即输入框输入的字体编码
方法4:在Eclipse中选择页面,右键选择Properties,在Text file encoding中选择GB2312
1.2 Servlet代码部分
方法1:request.setCharacterEncoding(“GB2312”);
作用:设置request对象的字符编码
方法2:针对每个获取到的参数进行转码
String newStr = new String(request.getParamter(“pageParamName”).getBytes(“ISO-8859-1”));
或者
String newStr = new String(request.getParamter(“pageParamName”).getBytes(“ISO-8859-1”),“GB2312”);
作用:对每个参数转码
2、Servlet->DateBase乱码
方法1:安装MySql时设置好字符编码
方法2:如果MySql已经安装完成,可以在每次创建表时临时修改表的字符编码
首先使用命令SHOW VARIABLES LIKE ‘character%’;查看数据库的字符编码
然后使用命令SET character_set_client = GB2312 ;(其他的类似)逐一更改数据库的字符编码
最后创建重新创建表,注意数据库重启后字符编码设置失效
3、Servlet->JSP乱码
方法1:response.setContentType(“text/html;charset=GB2312”);
作用:设置out输出流中字符的编码方式以及浏览器接收到这些字符后以什么编码方式来解释
方法2:response.setCharacterEncoding(“GB2312”);
作用:设置out输出流中所采用的编码方式