Web開發中中文亂碼的問題

2021-06-08 14:04:09 字數 4033 閱讀 8759

在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為編碼格式的位元組,再將位元組轉...