jsp+mysql编码问题的一种解决方案

来源:互联网 发布:高并发解决方案java 编辑:程序博客网 时间:2024/04/30 22:53

  这里所说的编码问题完全是指在html页面里中文显示的问
题。页面乱码似乎困扰我很久了从学jsp开始,直到前一阵子才弄
清。

       目前,支持中文编码的几种格式为:gb2312,utf-8,
gb18030等。

       mysql数据库编码    mysql数据库默认的编码是latin1 编
码(支持西欧等国家的字符)。如果创建数据库时使用的时latin1
编码,这时插入数据库的字符会被转换成该编码格式。而且,奇怪
的是它可以在控制台正常显示中文(也是从控制台插入的)。此
时,读出到html页面时会出现乱码。也许在读取数据库时在连接语
句中做编码转换可以解决问题,但是,本文假设在连接数据库中不
做任何编码转换,而是在数据库做编码设置和插入、读取数据前后
做编码转换。请看下面的常见乱码现象:

        乱码出现的几种情况、原因及解决方法:

         1。 插入mysql数据库后从控制台看到的中文是乱码。

         从html页面提交的数据到达数据库后看到的是乱码。这
种情况产生的过程如下:假设我们在register.html的表单上填写注
册信息。信息验证和插入数据库是在checkRe.jsp上完成的。这时
候问题来了。即使register.html、checkRe.jsp两个页面的编码都
是GB2312但是数据从register.html传到checkRe.jsp过程中使用的
是ISO-8850-1。因此checkRe.jsp接收到的数据实际上是ISO-
8850-1格式的。此时,在checkRe.jsp页面显示的提交信息(指中
文信息)和插入的数据库都会出现乱码。解决办法是:在

checkRe.jsp加入一条语句来转换编码:
        request.setCharacterEncoding("GB2312");   
        或者:
        String name= request.getParameter("name");
        String name2 = new String(name.getBytes("ISO-8859-1"),"GB2312");
        
        为了保证从控制台看到的数据不是乱码,数据库的编码格
式应该最好设为GB2312。如果你的mysql数据库默认的是latin1,
修改为gb2312后最好重新创建数据数据库。

         2。   从数据库读取数据到html页面时显示的是乱码。
        解决办法是:数据库的编码设为汉字编码格式:如
gb2312,同时,页面的编码也设为GB2312(注意:听说大小写有区
别的)。

      
        3。   在jsp页面之间传送中文字符的时候出先乱码。

        根据1的描述我们知道只要接收页面加上:  
             request.setCharacterEncoding("GB2312");
         就可以了。


         以上三种情况的出现根本原因是编码不一致 . 按照上述
解决办法可以免去数据库连接时的编码转换。当然,另外一种办法
就是在连接数据库时进行编码。但是,我没尝试过,呵呵。

原创粉丝点击