字元編碼和中文亂碼小敘

2021-06-23 08:58:32 字數 1513 閱讀 2314

記得剛使用ubuntu的時候,處理各種亂碼神馬的都是很麻煩的事情,後來開始寫一些web程式的時候,中文編碼的問題還是會不斷的出現,於是對於web程式設計師來說,字符集編碼已經是十分常見的問題了,但是如果不去系統的了解下,處理問題時還是會有些棘手的,這篇文章我就打算簡單的介紹下這些問題。

最初學習計算機的話,首先接觸的便是ascii編碼了,0是48,a是97啥的估計大家都記得很清楚吧,計算機中以8bit為乙個byte,於是乙個byte能表示256個數,ascii是用乙個位元組,並且第一位是0,也就是說只用了7個bit,於是ascii只有128種表示,這對於英文系統是最夠的了。但是歐洲很多字母和英文本母很不相同,於是為了擴充套件,第一位也納入使用,這樣就是iso8859-1編碼,又叫做latin-1,很多時候你不指定編碼的時候,預設編碼就是iso8859-1,這是乙個要注意的地方。

由於亞洲地區的文字不像歐洲那樣用幾個字母就可以了,於是亞洲各地區便有了自己的一些編碼格式。對於中文編碼而言,大家比較熟悉的就是gb2312編碼,這是大陸地區推行的簡體字的編碼標準,而相應的台灣的繁體字用的是big5的繁體字編碼,由於gb2312只有簡體字,後來又進行了擴充,便有了gbk,他是gb2312的超集,就是說gb2312編碼的字元,都可以用gbk的方式解讀。後來又加入了少數民族的字型有了gb18030,不過這個貌似不如gbk應用廣泛。

由於混亂的編碼格式,造成了國際化的困難,於是便有了大有一統天下之勢的unicode編碼,對於各國文字元號等都會在unicode有乙個統一的編碼,但是unicode只是一種表示方式,但是卻沒有規定表示符號的這個數字應該如何在計算機上儲存。而現在比較通行的儲存方式是utf-8,utf-8是一種變長的編碼方式。

所以對於中文字元而言,我們最常見的就是gbk和utf-8兩種編碼格式。對於windows而言用一種叫ansi的編碼格式,他是英文用ascii編碼,簡體中文用gb2312編碼,而linux等系統一般都會採用utf-8的編碼方式,所以當你在linux下開啟windows下的一些中文文字檔案時會出現亂碼的情況,就是因為本來應該是gb2312的編碼方式,卻用utf-8的格式來解讀必然就會出現錯誤。

當寫web程式時也要時刻注意編碼的統一,也就是資料庫裡資料的編碼,程式檔案的編碼,以及網頁顯示的編碼(就是charset欄位),以及他們之間的通訊的編碼方式。比如你是在windows寫程式的話,預設的程式編碼就是gbk,為了統一,你需要資料庫也要改為gbk編碼,網頁上也要加上這樣一句。

還有個需要注意的地方,就是當你使用的資料庫是mysql時,預設的字元通訊方式是iso8859-1,你需要加上這樣一句,來讓通訊字元也變為gbk,這樣就能在網頁上正常顯示出漢字了。

mysql_query

('set names gbk');

不過一般情況下還是推薦統一的去使用utf-8編碼,乙個原因是utf-8是一種大勢所趨,另乙個原因是現在大部分伺服器都是linux,所以utf-8會有更好的相容性。一般寫程式時,處理字元的時候先把utf-8轉成unicode來進行處理,因為unicode是定長的,所以當你轉unicode之後,統計字的個數時也非常方便,然後當需要輸出或者儲存時在轉換成utf-8方式,應該說這樣的處理是一種很好的方式。

擴充套件閱讀:

解決全站字元亂碼(POST和GET中文編碼問題)

servlet l post request.setcharacterencoding utf 8 l get string username request.getparameter username username new string username.getbytes iso 8859 1...

CentOS中文亂碼修改字元編碼使用支援中文

一 中文支援 安裝中文語言包 複製 如下 yum groupinstall chinese support 修改字元編碼配置,沒有這個檔案就建立它 複製 如下 vim etc sysconfig i18n 修改後內容如下 複製 如下 lang zh cn.gb18030 supported zh c...

CentOS下設定中文編碼設定和中文亂碼解決

centos下設定中文編碼設定 1 安裝支援中文 yum y group install chinese support2 修改字元編碼配置檔案 預設設定為英文 root tony ts tian sysconfig pwd etc sysconfig root tony ts tian sysco...