字符集 編碼和Unicode

2021-07-12 04:40:03 字數 1207 閱讀 4751

部分來自《深入理解c++11》。

在計算機中,總是使用二進位制位組合來表示複雜的資訊。首當其衝需要被標識的就是字元。為了使二進位制組合標識字元的方法在不同設計的計算機間通用,就迫切需要統一的字元編碼方法。於是在20世紀60年代的時候,ascii字元編碼就出現了。在ansi頒布的標準中,基本ascii的字元使用了7個二進位制位進行標識,這意味著可以標識128種不同的字元。這對英文本元(以及一些控制字元、標點符號等)來說綽綽有餘,不過隨著計算機在全世界的普及,非字元構成的語言(如中文)也需要得到支援, 128個字元對於全世界眾多語言而言就顯得力不從心了。

到了20世紀90年代, iso與unicode兩個組織共同發布了能夠唯一地表示各種語言中的字元的標準。通常情況下, 我們將乙個標準中能夠表示的所有字元的集合稱為字符集。通常,我們稱iso/unicode所定義的字符集為unicode。在unicode中,每個字元佔據乙個碼位(code point)。unicode字符集共定義了1 114 112個這樣的位,使用從0到10ffff的十六進製制數唯一地表示所有的字元。雖然字符集中的碼位唯一,但由於計算機儲存資料通常是以位元組為單位的,而且出於相容之前的ascii、大數小段數段、節省儲存空間等諸多原因,通常情況下,我們需要一種具體的編碼方式來對字元碼位進行標識。比較常見的基於unicode字符集的編碼方式有utf-8、utf-16及utf-32(一般人常常把utf-16和unicode混為一談)。

以utf-8為例,其採用了1-6位元組的變長編碼方式編碼unicode,英文通常使用1位元組表示,且與ascii是相容的,而中文常用3位元組標示。 下圖表示的就是utf-8的編碼方式。utf(unicode transformation format ).

請注意utf-8編碼的規律! 提取出的x序列為 code-point的二進位制數。

這篇文章很好:

例如: 

'黃' 的code-point為40644(也就是字元編號),  使用utf-16的編碼為 0x9ec4,  使用utf-8的編碼為 e9 bb 84(位元組序列), 轉成二進位制如下:

11101001, 10111011, 10000100,根據上表,提取出x的序列為  1001111011 000100, 表示十進位制的值為40644

這個**可以檢視unicode字符集的code-point:

請務必看此文:

這是英文原文:

字符集和Unicode編碼以及字型檔

字符集和字元編碼的關係 字符集是書寫系統字母與符號的集合,為每乙個 字元 分配乙個唯一的 id 學名為碼位 碼點 code point 字符集種類較多,每個字符集包含的字元個數不同,常見的字符集名稱 ascii字符集 gb2312字符集 gb18030字符集 unicode字符集等。字元編碼則是將字...

Unicode字符集和多字符集

由於各國語言的加入,ascii已經不能滿足資訊交流的需要,因此,為了能夠表示其它國家的文字,各國在ascii的基礎上制定了自己的字符集,它們正式的名稱應該是mbcs multi byte chactacter system,即多位元組字元系統 型別說明 unicode ansi 通用型別 字元wch...

字符集和字符集編碼詳解

gb2312 gbk ascii asni unicode utf 8等等,這些字眼非常常見,同時帶來許多的問題。本文只是從理解的角度,說明以上內容的不同含義從而達到區分其用法的目的是夠了的。至於實現方式,可以查閱各自的詳細標準官方文件。先解釋乙個概念,什麼是字符集,嗯,不解釋了,我弄乙個吧 從今以...