1. 程式人生 > >utf-8、unicode、gbk、gb2312、ANSI編碼的區別

utf-8、unicode、gbk、gb2312、ANSI編碼的區別

utf-8、unicode、gbk、gb2312編碼的區別

utf-8

先來看看百度的解釋:
一種針對Unicode的可變長度字元編碼,又稱萬國碼。現在已經標準化為RFC 3629。UTF-8用1到6個位元組編碼Unicode字元。用在網頁上可以統一頁面顯示中文簡體繁體及其它語言(如英文,日文,韓文)

utf8編碼可以顯示中文、英文以及其它語言,是一種國際化的標準,允許含BOM(可以理解為一中符號,來標識中文還是英文),但通常不含BOM,它對英文使用8位(即一個位元組),中文使用24為(三個位元組)來編碼

UTF-8編碼規則:如果只有一個位元組則其最高二進位制位為0;如果是多位元組,其第一個位元組從最高位開始,連續的二進位制位值為1的個數決定了其編碼的位數,其餘各位元組均以10開頭。UTF-8轉換表表示如下:

gb2312

翻譯為資訊交換用漢字編碼字符集,明顯就是國家規定的標準,GB2312編碼適用於漢字處理、漢字通訊等系統之間的資訊交換,通行於中國大陸

gbk

GBK是國家標準GB2312基礎上擴容後相容GB2312的標準。GBK的文字編碼是用雙位元組來表示的,即不論中、英文字元均使用雙位元組來表示,為了區分中文,將其最高位都設定成1。GBK包含全部中文字元,是國家編碼,通用性比UTF8差,不過UTF8佔用的資料庫比GBD大。

GBK、GB2312等與UTF8之間都必須通過Unicode編碼才能相互轉換:

GBK、GB2312—>Unicode—>UTF8

UTF8—>Unicode—>GBK、GB2312
我的理解為國外的標準和國內的標準需要通過unicode這一介質進行轉換

一般在程式設計的時候推薦同意編碼方式,推薦utf-8.,因為GBK包含全部中文字元,是國家編碼,通用性比UTF8差,不過UTF8佔用的資料庫比GBD大。現在的硬體裝置已經很高階了,所以使用utf8還是綽綽有餘的

ANSI

今天在用記事本進行編輯的時候,在想著記事本用的是什麼編碼,就開啟記事本的另存為,可以發現
ANSI
所以去查了以下ANSI的編碼,
在最初的時候,Internet上只有一種字符集——ANSI的ASCII字符集,它使用7 bits來表示一個字元,總共表示128個字元,其中包括了英文字母、數字、標點符號等常用字元。之後,又進行擴充套件,使用8 bits表示一個字元,可以表示256個字元,主要在原來的7 bits字符集的基礎上加入了一些特殊符號例如製表符

後來,由於各國語言的加入,ASCII已經不能滿足資訊交流的需要,因此,為了能夠表示其它國家的文字,各國在ASCII的基礎上制定了自己的字符集,這些從ANSI標準派生的字符集被習慣的統稱為ANSI字符集,它們正式的名稱應該是MBCS(Multi-Byte Chactacter System,即多位元組字元系統)。這些派生字符集的特點是以ASCII 127 bits為基礎,相容ASCII 127,他們使用大於128的編碼作為一個Leading Byte,緊跟在Leading Byte後的第二(甚至第三)個字元與Leading Byte一起作為實際的編碼。這樣的字符集有很多,我們常見的GB-2312就是其中之一。

例如在GB-2312字符集中,“連通”的編碼為C1 AC CD A8,其中C1和CD就是Leading Byte。前127個編碼為標準ASCII保留,例如“0”的編碼是30H(30H表示十六進位制的30)。軟體在讀取時,如果看到30H,知道它小於128就是標準ASCII,表示“0”,看到C1大於128就知道它後面有一個另外的編碼,因此C1 AC一同構成一個整個的編碼,在GB-2312字符集中表示“連”。

由於每種語言都制定了自己的字符集,導致最後存在的各種字符集實在太多,在國際交流中要經常轉換字符集非常不便。因此,提出了Unicode字符集,它固定使用16 bits(兩個位元組、一個字)來表示一個字元,共可以表示65536個字元。將世界上幾乎所有語言的常用字元收錄其中,方便了資訊交流。標準的Unicode稱為UTF-16。後來為了雙位元組的Unicode能夠在現存的處理單位元組的系統上正確傳輸,出現了UTF-8,使用類似MBCS的方式對Unicode進行編碼。注意UTF-8是編碼,它屬於Unicode字符集。Unicode字符集有多種編碼形式,而ASCII只有一種,大多數MBCS(包括GB-2312)也只有一種。

後續繼續更新