1. 程式人生 > >utf-8與gb2312的區別

utf-8與gb2312的區別

各個國家和地區所制定的不同 ANSI 編碼標準中,都只規定了各自語言所需的“字元”。比如:漢字標準(GB2312)中沒有規定韓國語字元怎樣儲存。這些 ANSI 編碼標準所規定的內容包含兩層含義: 1. 使用哪些字元。也就是說哪些漢字,字母和符號會被收入標準中。所包含“字元”的集合就叫做“字符集”。 2. 規定每個“字元”分別用一個位元組還是多個位元組儲存,用哪些位元組來儲存,這個規定就叫做“編碼”。

各個國家和地區在制定編碼標準的時候,“字元的集合”和“編碼”一般都是同時制定的。因此,平常我們所說的“字符集”,比如:GB2312, GBK, JIS 等,除了有“字元的集合”這層含義外,同時也包含了“編碼”的含義。

“UNICODE 字符集”包含了各種語言中使用到的所有“字元”。。用來給 UNICODE 字符集編碼的標準有很多種,比如:UTF-8, UTF-7, UTF-16, UnicodeLittle, UnicodeBig 等。

1、ISO-8859-1: 最簡單的編碼規則,每一個位元組直接作為一個 UNICODE 字元。比如,[0xD6, 0xD0] 這兩個位元組,通過 iso-8859-1 轉化為字串時,將直接得到 [0x00D6, 0x00D0] 兩個 UNICODE 字元,即 "ÖÐ"。 反之,將 UNICODE 字串通過 iso-8859-1 轉化為位元組串時,只能正常轉化 0~255 範圍的字元。 2、GB2312,

BIG5,Shift_JIS,ISO-8859-2 把 UNICODE 字串通過 ANSI 編碼轉化為“位元組串”時,根據各自編碼的規定,一個 UNICODE 字元可能轉化成一個位元組或多個位元組。 反之,將位元組串轉化成字串時,也可能多個位元組轉化成一個字元。比如,[0xD6, 0xD0] 這兩個位元組,通過 GB2312 轉化為字串時,將得到 [0x4E2D] 一個字元,即 '中' 字。 “ANSI 編碼”的特點: 1. 這些“ANSI 編碼標準”都只能處理各自語言範圍之內的 UNICODE 字元。 2. “UNICODE 字元”與“轉換出來的位元組”之間的關係是人為規定的。 3、UTF-8,UTF-16
,UnicodeBig 與“ANSI 編碼”類似的,把字串通過 UNICODE 編碼轉化成“位元組串”時,一個 UNICODE 字元可能轉化成一個位元組或多個位元組。 與“ANSI 編碼”不同的是: 1. 這些“UNICODE 編碼”能夠處理所有的 UNICODE 字元。 2. “UNICODE 字元”與“轉換出來的位元組”之間是可以通過計算得到的。

utf-8 GBK gb2312三者之間的聯絡

UTF-8:Unicode TransformationFormat-8bit,允許含BOM,但通常不含BOM。是用以解決國際上字元的一種多位元組編碼, 它對英文使用8位(即一個位元組),中文使用24為(三個位元組)來編碼。UTF-8包含全世界所有國家需要用到的字元,是國際編碼,通用性強。UTF-8編 碼的文字可以在各國支援UTF8字符集的瀏覽器上顯示。如,如果是UTF8編碼,則在外國人的英文IE上也能顯示中文,他們無需下載IE的中文語言支援 包。

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

UTF-8與GBK GB2312之間的轉換關係

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