在web
開發中經常會遇到中文亂碼問題。
先系統地說明一下,主要從兩個方面:原理,操作。
中文常用的編碼格式:gbk
和 utf-8
而乙個完整的web
應用包括:資料庫、持久層、控制層、頁面顯示層。
所以只有在保持四層中編碼格式一致即可解決亂碼問題。
資料庫中,以mysql
為例。
安裝時,系統預設編碼為latin-1
,將其更改為
utf-8。
在mysql
命令列中敲入命令:
mysql> show variables like 'character%';
| 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\mysql server 5.0\share\charsets\ |
8 rows in set (0.31 sec)
在linux
下修改my.conf
檔案(/etc/my.conf windows
下是修改
my.ini
檔案)
找到客戶端配置[client]
,在下面新增:
default-character-set=uft8
找到伺服器端配置[mysqld]
,在下面新增:
default-character-set=utf8
init_connect='setnames utf8' (設定連線
mysql
資料庫時使用
utf-8
編碼,讓
mysql
資料庫為
utf-8
執行)。
修改好後,重新啟動mysql
,查詢對比一下變數:
mysql> show variables like 'character%';
問題主要出在5
個環節上:
1. 資料庫客戶端字符集
2. 資料庫連線傳輸字符集
3. 資料庫儲存字符集
4. 資料庫查詢結果字符集
5. 資料庫啟動字符集
如果上述幾個編碼為latin-1
,則修改為
utf-8。
mysql>set character_set_*** ='utf8';
資料庫建表:
create database company default character set utf8;
drop table if exists emp;
create table emp (
id int(12) not null,
author varchar(200) not null,
primary key (id)
) engine=innodb default charset=utf8;
【說明】一般建表語句都寫在sql
指令碼中,在
linux
系統中可直接在
mysql
命令列輸入
source
指令碼路徑。但當
sql指令碼中含有中文時,在
windows
系統下建議使用
myeclipse
中的db browser
外掛程式。
持久層(jdbc/hibernate):
url=jdbc:mysql:
控制層:
request.setcharacterencoding("utf8");
通過這行**,在所有請求之前,使得request
使用指定的編碼方式來編碼。
tomcat容器:
在get
請求時需要修改
server.xml
檔案中的配置,給
connector
新增乙個
uriencoding=utf-8
屬性。
也可以通過過濾器來實現:
<--filter>
failedrequestfilter
org.apache.catalina.filters.failedrequestfilter
<--/filter>
onefilter
encoding.encodefilter
onefilter
/***一般成熟的框架都有寫好的編碼過濾器
//設定乙個響應頭,告訴瀏覽器,應該以什麼形式的編碼便是其返回的
html
resp.setcontenttype("text/html;charset=utf-8");
resp.setcharacterencoding("utf-8");
chain.dofilter(req,resp);
顯示層(jsp):
<%@page pageencoding="utf-8"%>
告訴jsp
引擎,在將
jsp轉換成
servlet
原始檔時,該
jsp檔案的編碼是什麼
<%@page contenttype="text/html;charset="utf-8"%>
相當於servlet
中的response.setcontenttype()
,即設定
響應頭。
瀏覽器會依據該編碼方式來顯示頁面。
儲存jsp
檔案時,其真正的編碼應該與設定的保持一致。
其他:瀏覽器的編碼設定為utf-8。
myeclipse中專案儲存格式設定為
utf-8。
Web開發中如何解決中文亂碼問題
亂碼問題永遠是web初學者的乙個攔路虎,如果要避免亂碼問題。需要了解亂碼問題的成因。首先介紹幾種常見的編碼。utf 8 8 bit unicode transformation format utf 8 是一種針對unicode的可變長度字元編碼,也是一種字首碼。它可以用來表示unicode標準中的...
web中文亂碼問題
在計算機中,只有二進位制的資料,不同字元對應二進位制的規則,就是字元的編碼。常用字符集 ascii碼 iso8859 1碼 gb2312和gbk unicode utf 8 出現亂碼的解決方案 1 以post方法提交的資料中有中文字元,可以在獲取請求引數值之前,呼叫request.setcharac...
web中文亂碼問題
瀏覽器預設編碼格式是iso 8859 1 單位元組編碼不能正常顯示中文 解決中文亂碼問題有兩種方法 1.tomcat中conf資料夾下面server.xml中 中新增uriencoding utf 8 新增後為 2.將從瀏覽器獲取的中文引數轉換為以iso 8859 1為編碼格式的位元組,再將位元組轉...