1. 程式人生 > >字符集和編碼

字符集和編碼

post 文化 解密 集合 accept 控制字符 rap 例如 國外

相信大家一定碰到過,打開某個網頁,卻顯示一堆像亂碼,如"б?ЯАзЪСЯ"、"?????????"?還記得HTTP中的Accept-Charset、Accept-Encoding、Accept-Language、Content-Encoding、Content-Language等消息頭字段?這些就是接下來我們要探討的。
1.基礎知識
計算機中儲存的信息都是用二進制數表示的;而我們在屏幕上看到的英文、漢字等字符是二進制數轉換之後的結果。通俗的說,按照何種規則將字符存儲在計算機中,如‘a‘用什麽表示,稱為"編碼";反之,將存儲在計算機中的二進制數解析顯示出來,稱為"解碼",如同密碼學中的加密和解密。在解碼過程中,如果使用了錯誤的解碼規則,則導致‘a‘解析成‘b‘或者亂碼。

字符集(Charset):是一個系統支持的所有抽象字符的集合。字符是各種文字和符號的總稱,包括各國家文字、標點符號、圖形符號、數字等。

字符編碼(Character Encoding):是一套法則,使用該法則能夠對自然語言的字符的一個集合(如字母表或音節表),與其他東西的一個集合(如號碼或電脈沖)進行配對。即在符號集合與數字系統之間建立對應關系,它是信息處理的一項基本技術。
通常人們用符號集合(一般情況下就是文字)來表達信息。而以計算機為基礎的信息處理系統則是利用元件(硬件)不同狀態的組合來存儲和處理信息的。元件不同狀態的組合能代表數字系統的數字,因此字符編碼就是將符號轉換為計算機可以接受的數字系統的數,稱為數字代碼。

2.常用字符集和字符編碼
常見字符集名稱:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集等。計算機要準確的處理各種字符集文字,需要進行字符編碼,以便計算機能夠識別和存儲各種文字。

ASCII(American Standard Code for Information Interchange,美國信息交換標準代碼)是基於拉丁字母的一套電腦編碼系統。
ASCII字符集:主要包括控制字符(回車鍵、退格、換行鍵等);可顯示字符(英文大小寫字符、阿拉伯數字和西文符號)
ASCII一開始使用7位(bit)表示一個字符,共123字符,但是不夠用,擴展用8位,一共256字符
ASCII的最大缺點是只能顯示26個基本拉丁字母、阿拉伯數目字和英式標點符號,因此只能用於顯示現代美國英語

(而且在處理英語當中的外來詞如na?ve、café、élite等等時,所有重音符號都不得不去掉,即使這樣做會違反拼寫規則)。而EASCII雖然解決了部份西歐語言的顯示問題,但對更多其他語言依然無能為力。因此現在的蘋果電腦已經拋棄ASCII而轉用Unicode。

3.GBXXXX字符集&編碼
天朝專家把那些127號之後的奇異符號們(即EASCII)取消掉,規定:一個小於127的字符的意義與原來相同,但兩個大於127的字符連在一起時,就表示一個漢字,前面的一個字節(他稱之為高字節)從0xA1用到 0xF7,後面一個字節(低字節)從0xA1到0xFE,這樣我們就可以組合出大約7000多個簡體漢字了。在這些編碼裏,還把數學符號、羅馬希臘的 字母、日文的假名們都編進去了,連在ASCII裏本來就有的數字、標點、字母都統統重新編了兩個字節長的編碼,
這就是常說的"全角"字符,而原來在127號以下的那些就叫"半角"字符了。

上述編碼規則就是GB2312。GB2312或GB2312-80是中國國家標準簡體中文字符集,全稱《信息交換用漢字編碼字符集·基本集》,又稱GB0,由中國國家標準總局發布,1981年5月1日實施。GB2312編碼通行於中國大陸

2.3. BIG5字符集&編碼
Big5,又稱為大五碼或五大碼,是使用繁體中文(正體中文)社區中最常用的電腦漢字字符集標準,共收錄13,060個漢字。

3.Unicode編碼:
由於計算機在世界各國興起之後,各國有自己的一套編碼語言,中國有類似GB-之類的,但是當各個國度的語言匯編到一塊的時候,就會出現不兼容,亂碼之類的。為了解決這個問題,一個偉大的創想產生了——Unicode。Unicode編碼系統為表達任意語言的任意字符而設計。它使用4字節的數字來表達每個字母、符號,或者表意文字(ideograph)。每個數字代表唯一的至少在某種語言中使用的符號。
在計算機科學領域中,Unicode(統一碼、萬國碼、單一碼、標準萬國碼)是業界的一種標準

非打印字符指在計算機中有一些字符是確確實實存在,但是它們不能夠顯示或者打印出來。
以ASCII碼表為例,ascii碼值在0-31的為控制字符,無法顯示和打印 有些 ASCII 字符是不可打印的。例如退格、另起一行、警報等。
能夠輸出的字符叫打印字符 例如:回車符就不是打印字符,它沒有對應的顯示圖像陣列
非打印字符:
1-31控制字符
0 字符串結束符
-1(255) EOF 文件結束符

控制字符,出現於特定的信息文本中,表示某一控制功能的字符。

從128 到255這一頁的字符集被稱”擴展字符集“

中國GB2312--》DBCS“(Double Byte Charecter Set 雙字節字符集)

UTF-8就是每次8個位傳輸數據,而UTF-16就是每次16個位。UTF-8就是在互聯網上使用最廣的一種unicode的實現方式,這是為傳輸而設計的編碼,並使編碼無國界,這樣就可以顯示全世界上所有文化的字符了。

很多的使用UTF-8編碼唯一的好處是,國外的用戶如果使用Windows XP英文版,瀏覽UTF-8編碼的任何網頁,無論是中文、還是日文、韓文、阿拉伯文,都可以正常顯示,UTF-8是世界通用的語言編碼,UTF-8的推廣要歸功於Google的應用,以及Blog開發者。

字符集和編碼