最近在学用jsp+mysql做网站.
跟许多初学者一样,被中文乱码问题弄得焦头烂额.
上网找了很多资料,试了很多方法,还是不管用.
反复折腾了好几天.终于解决了这个问题.
废话不多,下面进入正题.
我遇到的问题是这样的:
数据库里存有一些带中文字符的数据(例如商品名称,商品详细信息等),当我在jsp页面里获得这些数据并输出的时候,例如:
...
ResultSet rs=db.executeQuery("select name from db");
String Name = rs.getString("Name").toString();
...
%>
页面上显示的总是让人抓狂的乱码.
找了几天的资料,我找到以下原因:
1. mysql里的字符集不对.
用以下命令查看:
mysql> show variables like
'%char%';
|
Variable_name
| Value
|......
|
character_set_client
| latin1
|......
-- 客户端字符集
|
character_set_database |latin1|......
-- 数据库字符集
|
character_set_results
| latin1|......
|
character_set_system
| utf8
|......
+--------------------------+-------------------------------------+------
可见里面的多项默字符集都是latin1,这不可是通用字符集,于是将数据库里的字符集修改成utf8.
修改方法:
1.关闭mysql服务器.
2.在mysql根目录下找到my.ini文件,(虽然英文多,但别怕),往下拉,找到:
...
[client]
port=3306
[mysql]
default-character-set=latin1
....
将"default-character-set=latin1",改成"default-character-set=utf8".
3. 按"ctrl+s"保存文件
4.
在MySQLAdministrator.exe里的"启动变量---高级"里"默认字符集设置里,也将"其值改成utf8.之后按"应用更改".
5.开启mysql服务器
修改后便可在命令行里看到:
mysql> show variables like
'%char%';
+--------------------------+-------------------------------------+------
| Variable_name
| Value
|......
+--------------------------+-------------------------------------+------
| character_set_client
| utf8
|......
-- 客户端字符集
| character_set_connection | utf8
|......
| character_set_database | utf8
|......
-- 数据库字符集
| character_set_filesystem | binary
|......
| character_set_results |
utf8
|......
| character_set_server
| utf8
|......
-- 服务器字符集
| character_set_system
| utf8
|......
| character_sets_dir
| D:\MySQL Server 5.0\share\charsets\ |......
+--------------------------+-------------------------------------+------
这样就把mysql数据库里的字符集都变成utf8了.这样做可能在命令行显示里看不到中文字符,但为了传输字符方便,笔者认为这样还是挺好的.
接下来是页面的显示问题了.
我的解决办法是用一个java方法来转化:
....
Name = rs.getString("Name").toString();
Name = new String(Name.getBytes("ISO-8859-1"), "GBK");
//将其字符集转化
...
这样过后,问题就解决了!
后记:
哎.在编程的世界里,除了英文,其他的文字都属于弱势群体,中文也不例外.
字符集不统一,给开发者带来很大的不便.
希望有一天这个问题能得到完满的解决.