字符集 編碼

2021-08-31 10:36:13 字數 3142 閱讀 5664

字符集概念

(1)字符集:可以表示的字元和字元對應計算機位元組碼的對映;

(2)字元編碼方式:計算機中用來表示和傳輸如前所述字符集中對映的位元組碼的編碼方式。對於ascii和gb2312等字符集,他們在傳輸和計算機表示時的位元組碼不用編碼,直接用字元對應的位元組碼表示。但比如unicode

字符集,就有多種不同的編碼方式。

ascii

單位元組字符集,最廣泛的字符集及其編碼,是由美國國家標準局(ansi)制定的ascii碼(american standard code for information interchange,美國標準資訊交換碼),適用於所有拉丁文本字母,ascii碼有7位碼和8位碼兩種形式。

iso-8859系列

為了彌補ascii系列的不足,出現了很多各種型別的編碼,為了避免混亂,iso組織在2023年之後陸續發表了iso-8859(latin1 - 西歐字元)系列的編碼標準。其中以iso-8859-1最為典型。iso-8859-1覆蓋了大多數西歐語言。iso-8859系列互不相容。

把iso-8859系列的字符集想象成乙個:2^8 = 16 * 16 = 256個格仔的棋盤,這樣所有的西文字元用這樣乙個16×16的座標系就基本可以覆蓋全了。而英文實際上只用其中小於128的部分就夠了。利用大於128部分的空間的不同定義規則形成了真對其他歐洲語言的擴充套件字符集:iso-8859-2 iso-8859-4等。

unicode & ucs

iso組織制定通用多八位編碼字符集,(universal multiple-octet coded character set),簡稱ucs,標準的編號為:iso 10646。unicode學術學會機構制定unicode.

unicode與iso 10646國際編碼標準於2023年1月正式合作發展一套通用編碼標準,兩者相互相容,

兩者的區別在於:iso 10646著重定義字元編碼,而unicode則在此基礎上,為這些字元及編碼資料提出應用的方法以及對語義資料作補充。

utf-8

網際網路70%以上的資訊是英文。如果連英文都用2個位元組訪問(ucs-2),空間浪費就太多了。所謂utf-8就是這樣乙個為了提高英文訪問效率的字符集轉換格式:unicode transformation form 8-bit form。用utf-8,unicode的2位元組字元用變長個(1-3個位元組)表示;

特點:1、對英文,仍然和ascii一樣用1個位元組表示,這個位元組的值小於128(\x80);

2、對其他語言的用乙個值位於128-256之間的位元組開始,再加後面緊跟的2個位元組表示,乙個字元一共是3個位元組;

因此,在應用中程式處理過程中所有字元都是16位(雙位元組),但在訪問轉換成位元組流時使用utf-8格式轉換,對於英文本元來說和原來用ascii方式訪問時相比大小仍然是一樣的,而對中文來說和原來的gb2312編碼方式相比,大小為:(3位元組/2位元組)=1.5倍。

優點:1、與cpu位元組順序無關, 可以在不同平台之間交流

2、容錯能力高, 任何乙個位元組損壞後, 最多隻會導致乙個編碼碼位損失, 不會鏈鎖錯誤(如gb碼錯乙個位元組就會整行亂碼)

3、utf-8是一種為了方便網路傳輸,節省傳輸數量,而對unicode的字符集的字元編號進行轉換,從定長的2個位元組(16進製制)轉換成1~3個的變長位元組(2進製)表示的轉換格式。

(對於英文本元來說,採用utf-8對unicode編碼轉換後節省了一倍的傳輸成本(由定長的2個位元組變長1個位元組),但對於原本雙位元組的東亞字元來說,反而增加了成本,是原來的1.5倍)

utf-8的編碼

unicode中文「藝」字: 827a

二進位制的「藝」字編碼:1000 0010 0111 1010

utf-8的中文編碼規則: 1110***x 10****** 10******

utf-8的「藝」字編碼: 1110 10 10

utf-8的轉碼過程解析: 8對應的1000被填入第一位元組剩餘的4位。2對應的0010被填入第2位元組剩餘的前4位。7對應的0111被拆開,前2位01被填入第2位元組的後兩位,後2位1被填入第3位元組的前2位。a對應的1010被填入第3位元組的後4位。

utf-8的最終編碼結果:11101000---對應e8;10001001---對應89;10111010---對應ba。所以最終的utf-8編碼就是%e8%89%ba

在底層的平台中如jvm,採用的是unicode字符集,當要把這些字元通過網路傳輸時,可以選擇通過utf-8或其他(例如gb2312)編碼轉換方式對要傳輸的字元編碼進行轉換。如果目的端也是採用unicode字符集,那麼utf-8轉換後的編碼可以被正常識別並解碼成最終對應的unicode字符集編號。如果是非unicode字符集平台則可能出現亂碼(utf-8中漢字的3個連續位元組被解析成gb2312的2個連續位元組,出現丟失)。所以推薦在傳輸的兩端採用unicode字符集編碼,在傳輸方式上採用utf-8轉換方式。

中文編碼

gb2312中文資訊處理的國家標準

gb 13000完全等同於iso 10646-1/unicode 2.1

gbk對gb2312的擴充, 以容納gb2312字符集範圍以外的unicode 2.1的統一漢字部分, 並且增加了部分unicode中沒有的字元,和gb2312-80相容

gb18030-2000基於gb 13000, 作為unicode 3.0的gbk擴充套件版本, 覆蓋了所有unicode編碼, 地位等同於utf-8, utf-16, 是一種unicode編碼形式. 變長編碼, 用單位元組/雙位元組/4位元組對字元編碼. gb18030向下相容gb2312/gbk。

gb18030我國的強制標準,所有不支援gb18030標準的軟體將不能作為產品**

big5繁體漢字的市場標準

字符集編碼

喬哥 小萌,聽說你去面試了,怎麼樣啊?小萌 哎 喬哥,你給我講講什麼是字符集和編碼唄,ascii,utf 8,utf 16,utf 32又是啥?喬哥 好的,在搞懂字符集先來講講什麼是編碼吧 在計算機底層,比如說你的名字 小萌 在計算機中並不是文字的形式,而是一串二進位制數字,如 0110011001...

字符集編碼

references 字元編碼中ascii unicode和utf 8的區別 ascii碼 unicode編碼 utf 8編碼的區別 條目ascii unicode utf 8 占用byte數 12,不常用的字元占用4個 變長的編碼方式,將乙個unicode字元編碼成1 6個字元。常用的英文本母被編...

字符集編碼

字符集 字元 只有名字和顯示的樣式。例如 comma 字元碼位 交換碼 每個字元定義乙個唯一的數字表示 碼位 例如 0x2c 字元編碼 內碼 針對一套字元碼位的對映演算法,以在計算機內部用位元組序列表示每個碼位。ascii字符集 主要針對英語使用 每個字元的定義,字元碼位和字元編碼完全相同,最簡單的...