Web開發中如何解決中文亂碼問題

2021-09-25 18:47:11 字數 1932 閱讀 9544

亂碼問題永遠是web初學者的乙個攔路虎,如果要避免亂碼問題。需要了解亂碼問題的成因。首先介紹幾種常見的編碼。

utf-8(8-bit unicode transformation format)

utf-8 是一種針對unicode的可變長度字元編碼,也是一種字首碼。它可以用來表示unicode標準中的任何字元,且其編碼中的第乙個位元組仍與ascii相容,這使得原來處理ascii字元的軟體無須或只須做少部份修改,即可繼續使用。因此,它逐漸成為電子郵件、網頁及其他儲存或傳送文字的應用中,優先採用的編碼。

utf-8使用一至四個位元組為每個字元編碼:

128個us-ascii字元只需乙個位元組編碼(unicode範圍由u+0000至u+007f)。

帶有附加符號的拉丁文、希臘文、西里爾字母、亞美尼亞語、希伯來文、阿拉伯文、敘利亞文及它拿字母則需要二個位元組編碼(unicode範圍由u+0080至u+07ff)。

其他基本多文種平面(bmp)中的字元(這包含了大部分常用字)使用三個位元組編碼。

其他極少使用的unicode 輔助平面的字元使用四位元組編碼。

gb2312

gb2312是中華人民共和國國家標準簡體中文字符集,全稱《資訊交換用漢字編碼字符集·基本集》,又稱gb0,由中國國家標準總局發布,2023年5月1日實施。gb2312編碼通行於中國大陸;新加坡等地也採用此編碼。中國大陸幾乎所有的中文系統和國際化的軟體都支援gb 2312。

在使用gb2312的程式通常採用euc儲存方法,以便相容於ascii。瀏覽器編碼表上的「gb2312」,通常都是指「euc-cn」表示法。

每個漢字及符號以兩個位元組來表示。第乙個位元組稱為「高位位元組」,第二個位元組稱為「低位位元組」。

「高位位元組」使用了0xa1-0xf7(把01-87區的區號加上0xa0),「低位位元組」使用了0xa1-0xfe(把01-94加上0xa0)。 由於一級漢字從16區起始,漢字區的「高位位元組」的範圍是0xb0-0xf7,「低位位元組」的範圍是0xa1-0xfe,占用的碼位是72*94=6768。其中有5個空位是d7fa-d7fe。

例如「啊」字在大多數程式中,會以兩個位元組,0xb0(第乙個位元組)0xa1(第二個位元組)儲存。(與區位碼對比:0xb0=0xa0+16,0xa1=0xa0+1)。

如果要避免web頁面中的亂碼,最好統一字串編碼:

1.建立資料庫的時候,選擇utf-8編碼

2.建立php檔案的時候選擇utf-8編碼,

3.防止資料傳輸中亂碼 mysql_query(『set names utf8』);

4.在靜態頁面加上

5.在php檔案中可以加上header(「content-type: text/html; charset=utf-8");

以下是常見情況下的亂碼成因及解決方法:

1、資料庫採用utf8 編碼,而頁面申明編碼是gb2312 ,這是最常見的產生亂碼的原因。這時候在php指令碼裡面直接select資料出來的就是亂碼,需要在查詢前先使用: mysql_query(「set names gbk」); 來設定mysql連線編碼,保證頁面申明編碼與這裡設定的連線編碼一致(gbk是gb2312的擴充套件 )。如果頁面是utf-8 編碼的話,可以用: mysql_query(「set names utf8」); 注意是utf8而不是一般用的utf-8。假如頁面申明的編碼與資料庫內部編碼一致可以不設定連線編碼。

3、ajax與後台互動的時候可能會產生中文亂碼,這是你js互動的後台指令碼輸出時,由於ajax在接收responsetext或respon***ml的值時是按照utf-8的編碼格式進行解碼的,所以如果伺服器端傳遞的資料不是utf-8格式,在接收responsetext或respon***ml的值時,就可能產生亂碼,解決的辦法是保證從伺服器端傳遞的資料採用utf-8的編碼格式。

例如:response.setcontenttype(「text/html;charset=utf-8」);(jsp)

header(「content-type: text/html; charset=utf-8");(php)

如何解決WEB應用中文亂碼問題

最容易出現亂碼的場景是瀏覽器向伺服器傳送請求的過程,解決的策略就是強制為請求和響應設定編碼格式。1.在每個 controller 中單獨處理 request.setcharacterencoding utf 8 response.setcharacterencoding utf 8 2.在 web....

linux如何解決中文亂碼

檢視系統當前字符集 echo lang locale 檢查xshell crt的字符集 命令修改字符集 vim etc profile.d locale.sh export lc ctype zh cn.utf 8export lc all zh cn.utf 8 vim etc locale.co...

linux中顯示中文亂碼如何解決?

第一步 排查 第1個里程碑 看看linux系統的字符集 echo lang 第2個里程碑 遠端連線工具 xshell securecrt putty 字符集 第二步 修改 修復 修改字符集 第乙個里程碑 修改xshell字符集 推薦 第二個里程碑 修改linux系統的字符集 1.臨時 export ...