网上有很多这方面的资料,但很多要么是零星的几句,要么是长篇大论从编码的概念开始说起,我不是搞理论的,给自己的要求是会用就行。废话不说,开始正题吧。
我的开发环境是:XP-sp2,Tomcat5.0,jdk1.42,mysql4.0.21-nt
在玩jsp时发现,jsp把中文数据存入mysql或者从mysql读取出来显示的是乱码,无语,用百度搜了很多资料,解决问题。现总结一下。
解决方法一:
连接mysql时(无论在从mysql读还是取数据的情况),指定使用的编码方式为gb2312,具体代码如下
//装载mysql-jdbc驱动
Class.forName("com.mysql.jdbc.Driver").newInstance();
//连接数据库
Connection sqlCon = DriverManager.getConnection( "jdbc:mysql://localhost:3306/test?user=root&password=1&useUnicode=true&characterEncoding=gb2312" );
解决方法二:
如果方法一不行那么在方法一的基础上对读入的字符串进行强制编码方式转换。
代码示例如下:
String name = rst.getString("name");
name= new String(name.getBytes("ISO-8859-1"),"gb2312");
注:代码也可以为:String name =new String( rst.getString("name").getBytes("ISO-8859-1"),"gb2312"));其中rst为返回的resultset,ISO-8859-1为mysql默认的编码方式,代码的目的是把以ISO-8859-1的编码转换为gb2312编码方式,这样强制转换,可以解决一部分问题,如果结合方法一,应该可以解决中文乱码问题。
解决方法三:
这个方法在有些文章里是首推的,我首先也是试了这个方法,但是好像不行。这里还是说一下,不知是不是我操作错误。还是先贴原文吧:
"如果数据库中有中文的话而mysql默认的语言不是中文时要在配置文件C:winntmy.ini 中的 [mysqld] 里添加一行:
default-character-set=gbk
然后重起mysql"(原文地址:http://www.blogdriver.com/blog/tb.b?diaryID=338894)
我的是xp系统,所以my.ini在C:WINDOWS下,用editplus打开,没有修改过的代码如下:
......
[mysqld]
basedir=E:/Program Files/mysql
#bind-address=192.168.0.150
......
[WinMySQLadmin]
Server=E:/Program Files/mysql/bin/mysqld-nt.exe
......
按照原文所说的,修改配置代码如下:
......
[mysqld]
basedir=E:/Program Files/mysql
default-character-set=gbk
#bind-address=192.168.0.150
......
[WinMySQLadmin]
Server=E:/Program Files/mysql/bin/mysqld-nt.exe
......
然后重启winmysqladmin.exe
如果没有方法一和二为基础的话,用这个方法我试过不行。有了方法一和二,即使不用方法三,我也解决了中文读写的乱码问题。
最后,别忘了在jsp中声明:
contentType="text/html;charset=gb2312"