天天看點

[聞缺陷則喜]編碼與實作方式

人類記憶字母、數字、漢字、符号需要記住讀音或筆順;計算機制隻需要記錄編号。

  1. ASCII碼

文本編碼方式的基礎是ASCII碼,它是一個7位的編碼标準,包括26個小寫字母、26個大寫字母、10個數字、32個符号、33個控制代碼和一個空格,共128個代碼。其中ASCII碼是大多數常用編碼的基礎。

  1. ANSI

ANSI(美國國家标準協會)通常使用 0x00~0x7f 範圍的1 個位元組來表示 1 個英文字元。超出此範圍的使用0x80~0xFFFF來編碼,即擴充的ASCII編碼。在簡體中文Windows作業系統中,ANSI 編碼代表 GB2312編碼(國标碼),GBK是GB2312的擴充;在繁體中文Windows作業系統中,ANSI編碼代表Big5(大五碼);在日文Windows作業系統中,ANSI 編碼代表 JIS 編碼。

一個漢字可能同時存在于GB2312、Big5、JIS中,他們的編碼不一定相同。“就”在GB2312中的編碼是{ 0xbe, 0xcd },在Big5中是{ 0xb4, 0x4e }。“義”在GB2312的編碼是{ 0xc1, 0x78 },在Big5中是{ 0xb8, 0x71 }。由于是先有繁體字後有簡體字,是以GB2312中有許多繁體字,Big5中我暫沒發現簡體字。

GB2312和Big5除ASCLL碼一個位元組外,其它都是兩個位元組。GB2312,範圍:0xA1A1(41377) - 0xFEFE(65278),漢字範圍:0xB0A1(45217) - 0xF7FE(63486)。Big5碼,“高位位元組”使用了0x81-0xFE,“低位位元組”使用了0x40-0x7E,及0xA1-0xFE。

1.Unicode

Unicode,萬國碼、統一碼,可以同時支援多國語言。

2.實作方式

目前(2021年8月)有99089個字元,其中包括71226個漢字。2個位元組最多隻能表示6萬多個字是以需要4位。

UTF32,所有字元都是4個位元組。

UTF16大部分字元(往往是常用字元)2位元組,少量4位元組。Unicode标準規定U+D800..U+DFFF不對應于任何字元,是以以D8到DF開頭的是4位元組,否則是2位元組。

繼續閱讀