1.response.setContentType("text/html;charset=gb2312");
在做servlet的時候,在doGet中已經設定了response.setContentType("text/html;charset=gb2312");
pw.println("姓名");
pw.println("性別");
pw.println("郵箱");
pw.println("地址");
pw.println("權限");
這些漢字的可以正確顯示,但是從數據庫中查詢返回的漢字顯示為亂碼:
姓名 | 性別 | 郵箱 | 地址 | 權限 |
admin | 0 | admin@163.com | ???????? | 1 |
user1 | 0 | user1@163.com | ???????? | 5 |
user2 | 0 | user2@163.com | ???????? | 5 |
user3 | 0 | user3@163.com | ?????à?? | 3 |
user4 | 0 | user4@163.com | ???????¨ | 3 |
user5 | 0 | user5@163.com | ???????¨ | 5 |
user6 | 0 | user6@163.com | ???????¨ | 5 |
最近幾天一直都在學JSP,我用的數據庫是Mysql。在連接數據庫的過程中,剛開始我只是簡單的執行了查詢命令,發現從數據庫取出的中文數據全部顯示成了亂碼,查了一些資料之后,我先用了下面的一個轉換函數,值得高興的是,讀出的中文顯示正常:
將從Mysql數據庫中得到的中文數據,通過以下轉換函數 String trans(String chi)進行處理,即可正常顯示中文:
String trans(String chi) {
String result = null;
byte temp[];
try {
temp = chi.getBytes("iso-8859-1");
result = new String(temp);
} catch(UnsupportedEncodingException e) {
System.out.println(e.toString());
}
return result;
}
但很快,我意識到這種方法只是治標不治本,因為在插入中文數據時,又沒法在Mysql中正常顯示中文。而真正治本的方法是,將Mysql的編碼格式由默認的latin1改成gb2312.
改的步驟如下:
1. 設置Mysql的編碼格式(注意是在創建數據庫之前就要設置)
找到Mysql安裝目錄下的 myini文件,用記事本打開,找到以下兩句:
[mysql]
default-character-set=latin1
--------------------------------------------------------------------------------------------------
[mysqld]
# The TCP/IP Port the MySQL Server will listen on
port=3306
#Path to installation directory. All paths are usually resolved relative to this.
basedir="C:/Program Files/MySQL/MySQL Server 5.0/"
#Path to the database root
datadir="C:/Program Files/MySQL/MySQL Server 5.0/Data/"
# The default character set that will be used when a new schema or table is
# created and no character set is defined
default-character-set=latin1
我們需要做的是將這兩處的默認編碼格式由“latin1”改成“gb2312”。
改好之后,重啟Mysql 。
2. 在Mysql中開始創建數據庫
用相關命令創建數據庫,表等
注意: 在創建表時要加上一句 TYPE=MyISAM, default character set gb2312;
如以下示例:
create table student
-> (sno varchar(20),
-> sname varchar(10),
-> sex char(2),
-> age numeric(2),
-> dept varchar(20),
-> primary key(sno))
-> type=myisam,default character set gb2312;
3. 在Java文件或者JSP文件中連接數據庫
在Java代碼中:
str = "com.mysql.jdbc.Driver";
url="jdbc:mysql://localhost:3306/example?useUnicode=true&characterEncoding=gb2312";
user = "root";
password = "123456";
Class.forName(str).newInstance();
conn = DriverManager.getConnection(url,user,password);
在JSP中需要注意的有:
<%@page contentType="text/html"%>
<%@page pageEncoding="gb2312" %>
<%@ page import="java.sql.*,java.io.*" %>
gb2312">
OK,經過上述一些設置之后,JAVA連Mysql將不會再出現中文顯示亂碼!