圖解編碼基礎(chǔ)
2012-01-12 18:46 海不是藍 閱讀(2254) 評論(11) 收藏 舉報遠古時代:ascii
A long time ago,米國童鞋想打字了,于是就有了ascii碼。

ascii碼的一個字是8位(一個字節(jié),8個二進制),但是只用后7位(0-127),
英語中一般的字符以及數(shù)字、字母;剩下最高位1比特被用作一些通訊系統(tǒng)的奇偶校驗。
輸出下ascii碼
for (byte i = 0; i <= 127; i++)
{
Console.Write("{0}-0x{0:x}:{1}{2}", i, (char)i, (i + 1) % 4 == 0 ? "\n" : " ");
}

注意:0x0是nul,代表結(jié)束標志'\0'。(修改:之前這里寫的是NULL,多謝peerben童鞋的指出。)
可怕的事情發(fā)生了:OEM字符集的衍生
米國童鞋憤怒了:“我受夠了每天都只能打這128個字符!不!是127個,第一個什么也不是。啊。。。你妹啊!”。

so!一些不乖的童鞋開始打歪主意了!
一個字節(jié)能夠表示的數(shù)字(編號)有256個,而ASCII字符只用到了0x00~0x7F,也就是占用了前128個,后面128個數(shù)字不用白不用!

這些童鞋各自有各自的想法,這就導(dǎo)致了當時銷往世界各地的機器上出現(xiàn)了大量各式各樣的OEM字符集。
東方國度也開始用電腦啦:多字節(jié)字符集(MBCS)和中文字符集
時代在進步,東方的國度也開始用電腦了。

對于歐美國家的童鞋來說,也許ascii足夠了,但是對于東方國度,這256個字符遠遠不夠的。
但是東方的人民是無敵的!很快變發(fā)明了多字節(jié)編碼方式。例如中國使用的就是雙字節(jié)字符集編碼。
繼續(xù)進步!中國的漢字
中國童鞋們的漢字系統(tǒng)是博大精深,數(shù)量也是比26個字母多了不知道多少倍,但是一切困難在中國童鞋面前都是紙老虎!是紙老虎!
GB2312
用于簡體中文,一共收錄了7445個字符,包括6763個漢字和682個其它符號。漢字區(qū)的內(nèi)碼范圍高字節(jié)從B0-F7,低字節(jié)從A1-FE,占用的碼位是72*94=6768。其中有5個空位是D7FA-D7FE。
繁體古文怎么辦?big5
用于繁體中文,
56個民族是一家!GBK1.0和GB18030

GB2312支持的漢字太少。1995年的漢字擴展規(guī)范GBK1.0收錄了21886個符號,它分為漢字區(qū)和圖形符號區(qū)。漢字區(qū)包括21003個字符。
2000年的GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數(shù)民族文字。從漢字字匯上說,GB18030在GB13000.1的20902個漢字的基礎(chǔ)上增加了CJK擴展A的6582個漢字(Unicode碼0x3400-0x4db5),一共收錄了27484個漢字。
混亂的終結(jié)!Unicode
太多太多的編碼了,慢慢的,全世界的童鞋們發(fā)現(xiàn)沒有個統(tǒng)一的標準是沒法發(fā)展進步的,
so!終結(jié)者Unicode出現(xiàn)了。
ISO組織的童鞋們對全球混亂的編碼標準已經(jīng)忍無可忍了,所以他們廢了所有的地區(qū)性編碼方案,重新搞一個包括了地球上所有文化、所有字母和符號的編碼!他們打算叫它"Universal Multiple-Octet Coded Character Set",簡稱 UCS, 俗稱 "UNICODE"。
Unicode是2個字節(jié)的,簡稱為UCS。現(xiàn)在用的是UCS-2,即2個字節(jié)編碼。2個字節(jié)最多能夠表示65536個編碼。
這樣太少,所以出現(xiàn)了UCS-4, 即4個字節(jié)編碼,由原先的65536個編碼擴展至將近100萬編碼。
UTF8,UTF16和UTF32

UTF,即Unicode Transformer Format,是Unicode代碼點(code point)的實際表示方式,按其基本長度所用位數(shù)分為UTF-8/16/32。它也可以認為是一種特殊的外部數(shù)據(jù)編碼,但能夠與Unicode代碼點做一一對應(yīng)。
UTF-8是變長編碼,每個Unicode代碼點按照不同范圍,可以有1-3字節(jié)的不同長度。
//UTF-8是壓縮的Unicode編碼方式.
UTF-16長度相對固定,只要不處理大于\U200000范圍的字符,每個Unicode代碼點使用16位即2字節(jié)表示,超出部分使用兩個UTF-16即4字節(jié)表示。按照高低位字節(jié)順序,又分為UTF-16BE/UTF-16LE。
UTF-32長度始終固定,每個Unicode代碼點使用32位即4字節(jié)表示。按照高低位字節(jié)順序,又分為UTF-32BE/UTF-32LE。
遠古時代:ascii,A long time ago,米國童鞋想打字了,于是就有了ascii碼。ascii碼的一個字是8位(一個字節(jié),8個二進制),但是只用后7位(0-127),
英語中一般的字符以及數(shù)字、字母;剩下最高位1比特被用作一些通訊系統(tǒng)的奇偶校驗。
浙公網(wǎng)安備 33010602011771號