tft每日頭條

 > 科技

 > 中文字符集編碼範圍

中文字符集編碼範圍

科技 更新时间:2024-07-07 07:06:23

代碼都是寫給人看的,計算機隻識别0、1二進制數據。

正如昨天從字符編碼的背景說起,說到了字符集。今天我們就接着說說字符編碼,以及以“國”字為例,來說說字符編碼,解碼的過程。

01

字符編碼

字符編碼是一套法則,使用該法則能夠對自然語言的字符的一個集合(如字母表或音節表),與其他東西的一個集合(如号碼或電脈沖)進行配對。即在符号集合與數字系統之間建立對應關系,它是信息處理的一項基本技術。換句話說:字符編碼就是将符号轉換為計算機可以接受的數字系統的數,稱為數字代碼。

字符集

字符編碼

ASCII

ASCII

ISO-8859-1

ISO-8859-1

GB2312

GB2312

GBK

GBK

Unicode

UTF-8,UTF-16,UTF-32

從第一篇中的截圖也能看出,一個字符集,其實就是數字地址和其對應文字、符号之間對應關系。字符集本身就有字符編碼的功能。下來重點要說下UTF-8。

由于Unicode對某些字符來說,占用字節太多,太浪費空間。所以,人們設計可變長的UTF-8編碼規則來節省存儲空間。UTF-8一種針對Unicode的可變長度字符編碼(定長碼),也是一種前綴碼。它可以用來表示Unicode标準中的任何字符,且其編碼中的第一個字節仍與ASCII兼容。

UTF-8的編碼規則很簡單,隻有二條:

第一,對于單字節的符号,字節的第一位設為0,後面7位為這個符号的Unicode碼。因此對于英語字母,UTF-8編碼和ASCII碼是相同的。

第二,對于n字節的符号(n>1),第一個字節的前n位都設為1,第n 1位設為0,後面字節的前兩位一律設為10。剩下的沒有提及的二進制位,全部為這個符号的Unicode碼。

02

一個示例

下來,我們做一個示例。用來形象的展現下,文本編碼之間的轉換關系。還是用我們中國的“國”字來舉例:由于是中文,那麼這個“國”字,肯定在ASCII碼裡面不存在的;在ISO-8859-1裡面也不存在的。

我們來看看“國”字在GBK裡面的地址:從上面的截圖能看到16進制地址是:B9FA。轉換成2進制,就是10111001 11111010。而B9FA在Unicode字符集裡面是一個朝鮮文。

中文字符集編碼範圍(字符集字符編碼)1

而這一串二進制10111001 11111010 不符合UTF-8編碼規則,所以在UTF-8裡面找不到對應字符。

而“國”字在Unicode裡面的字符16進制地址是:56FD。轉成二進制:00000000,00000000,01010110,11111101

那麼這個二進制,如果用UTF-8實現的話,邏輯應該是怎麼樣的呢?這個二進制串,有15位。那麼在UTF-8裡面用幾個字節來存放呢?

第一步:将上面二進制數據從低往高按照UTF-8規則來一位一位存放。

中文字符集編碼範圍(字符集字符編碼)2

第二步:繼續從低往高存放位數據:

中文字符集編碼範圍(字符集字符編碼)3

第三步結束後發現,在UTF-8裡面,3個字節就可以存儲下對應的Unicode中的“國”字。

中文字符集編碼範圍(字符集字符編碼)4

如上圖,灰色,表示UTF-8規則,第一個字節,3個1,表示有3個字節。第3 1位為0。淡紅色的0表示高位補0。綠色表示Unicode編碼用UTF-8編碼實現的數據位。

也就是這個二進制,111001011001101110111101。轉換為16進制後為:E59BBD

校驗:我們通過網絡工具,來查看下,“國”字UTF-8編碼的二進制,如下圖:

中文字符集編碼範圍(字符集字符編碼)5

UTF-8編碼轉16進制,如下圖:

中文字符集編碼範圍(字符集字符編碼)6

可見,二進制,16進制,和我們自己推算出來的結果完全一緻。

而如果用E59BBD地址,反過來在GBK字符集裡面查找的話,确是什麼都查找不到的。

中文字符集編碼範圍(字符集字符編碼)7

由于GBK字符集總共有23940個碼位。其中收錄漢字和圖形符号21886個。而E59BBD 10進制數字為:15047613。遠遠超過23940這個數字。故此,用E59BBD在GBK裡面查找對應内容,肯定什麼都查不到。

回到文首說的“新聞”=>“鏂伴椈”這個問題,就很容易解釋了。“新聞” 兩個字UTF-8編碼16進制數據為:“E696B0 E997BB”。在UTF-8轉換成GBK編碼過程中,由于GBK是雙字節編碼,所以,上述16進制數據變成3個字符“E696”、“B0E9”、“97BB”。而這三個字符,在GBK字符集中對應的字符就是“鏂”、“伴”、“椈”。所以就會表現出切換編碼格式後,“新聞” 變成 “鏂伴椈” 這種表象。

經過這一番分析,舉例。我們對什麼是ASCII,什麼是GBK,什麼是Unicode,什麼是UTF-8可能了解的更清晰,更透徹一些了。

,

更多精彩资讯请关注tft每日頭條,我们将持续为您更新最新资讯!

查看全部

相关科技资讯推荐

热门科技资讯推荐

网友关注

Copyright 2023-2024 - www.tftnews.com All Rights Reserved