揭開字元的面紗(一)

2021-09-29 19:36:56 字數 1651 閱讀 9834

在以前,乙個位元組8位最多表示256個字元(但是計算機字元編碼只有0-127的編碼。被稱為ascii編碼),對於中文漢字是遠遠不夠的。為了支援這些語言文字系統,雙位元組字符集(double-byte character ser,dbcs)因此而生。在雙位元組字符集中,乙個字串中的每個字元都有1或2個字元組成。對於這種不確定的位元組數我們是很難判斷的,unicode也因此而生,正因為一句老話,存在即合理(自然選擇)。

在windows vista中,每個unicode字元都是採用utf-16編碼(每個字元編碼為兩個位元組);即使統一採用兩個位元組,有一些漢字還是無法表示,utf-16支援使用**(surrogate)4個位元組。.net framework 始終採用utf-16來編碼所有的字元和字串,並且在windows上編碼,採用utf-16開發程式,能夠改進效能和減少記憶體消耗。

utf-8:曾經我以為utf-8只是用乙個位元組來表示字元,對於其中怎麼實現乙個位元組儲存那麼多漢字卻總是心存疑問,有這樣想法的同學,希望能夠認真看一段。utf-8僅僅是一種編碼標準,並不是說用乙個位元組或者8位來表示乙個字元,而是採用1~4的字元來表示乙個字元。比如說有些字元可以用1個位元組表示,有些字元可以用2個字元表示,甚至可以用3或4個字元表示。utf-8不是特定用乙個位元組或者8位表示,而是1至4個位元組。

unicode字元範圍

utf-8位元組數

utf-8編碼方式

0x0000 ~ 0x0080

1個位元組

0******x

0x0080 ~ 0x07ff

2個位元組

110***xx 10******

0x0800 ~0xffff

3個位元組

1110***x 10****** 10******

**對4個位元組

11110*** 10****** 10****** 10******

utf-8編碼規則:

(1)對於ascii(單位元組字元)字元,採用和ascii相同的編碼方式,即只使用乙個位元組表示,且該位元組第一位為0.

(2)對於多位元組(2~4位元組)字元,假設位元組數為n(1 < n <= 4),第乙個位元組:前n位都設為1,第n+1位設為0;後面的n-1個位元組的前兩位一律設為10。所有位元組中的沒有提及的其他二進位制位,全部為這個符號的unicode碼。

utf-32:將每個字元都編碼為4個位元組,從記憶體角度來看,這種方式並不高效。

但是西方國家沒有想到東方還有乙個擁有2023年悠久歷史的文明大國,其漢字也是成千上萬!!!所以在計算機引入中國後,國家技術監督局設計了gb系列編碼方案(gb=guo biao)。gb編碼採用兩個位元組表示乙個漢字;同時相容ascii編碼,規定各個位元組的最高位(首位)必須為1,從而避免和最高位為0的ascii字符集衝突。

編碼名稱

位元組數漢字範圍

gb2312

變位元組(ascii 1位元組,漢字2個位元組)

6763個漢字

gb13000

變位元組(ascii 1位元組,漢字2個位元組)

20902個漢字

gbk2個位元組

21886個漢字和圖形符號(含gb2312,big5中所有字元)

gb18030

變位元組(ascii 1位元組,漢字2個或4個位元組)

27484個漢字

了解字元編碼對我們深入理解計算機系統有很大的好處,這也是基礎中的基礎。如果有錯,希望大佬們能夠指出,加以改進。

Caffe 初識,揭開面紗

這一段時間把caffe官網上的例子跑了一下,對caffe有了乙個大概的了解。如果你想對caffe有個比較清晰的了解,建議認真閱讀官網上的資料,尤其在caffe資料極少的情況下,這種方法是最有效的途徑,可以讓你少走許多彎路,不要上來就在網上隨便找個教程配置環境,上來就想跑例子。博主就是赤裸裸的例子,在...

Caffe 初識,揭開面紗

這一段時間把caffe官網上的例子跑了一下,對caffe有了乙個大概的了解。如果你想對caffe有個比較清晰的了解,建議認真閱讀官網上的資料,尤其在caffe資料極少的情況下,這種方法是最有效的途徑,可以讓你少走許多彎路,不要上來就在網上隨便找個教程配置環境,上來就想跑例子。博主就是赤裸裸的例子,在...

揭開信貸神秘面紗

貸款信用保險是指保險人對銀行或其他金融機構與企業之間的借貸合同進行擔保,以承保借款人信譽風險的保險。在貸款信用保險中,貸款方 即債權人 是投保人。但保單簽發後,貸款方即成為被保險人。當企業無法歸還貸款時,債權人可以從保險那裡獲得補償。貸款人在獲得保險人的補償後,必須將債權轉讓給保險人,由保險人向借款...