图解编码基础
遠(yuǎn)古時(shí)代:ascii
A long time ago,米國(guó)童鞋想打字了,于是就有了ascii碼。
ascii碼的一個(gè)字是8位(一個(gè)字節(jié),8個(gè)二進(jìn)制),但是只用后7位(0-127),
英語(yǔ)中一般的字符以及數(shù)字、字母;剩下最高位1比特被用作一些通訊系統(tǒng)的奇偶校驗(yàn)。
輸出下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é)束標(biāo)志'\0'。(修改:之前這里寫(xiě)的是NULL,多謝peerben童鞋的指出。)
?
可怕的事情發(fā)生了:OEM字符集的衍生
米國(guó)童鞋憤怒了:“我受夠了每天都只能打這128個(gè)字符!不!是127個(gè),第一個(gè)什么也不是。啊。。。你妹啊!”。
so!一些不乖的童鞋開(kāi)始打歪主意了!
一個(gè)字節(jié)能夠表示的數(shù)字(編號(hào))有256個(gè),而ASCII字符只用到了0x00~0x7F,也就是占用了前128個(gè),后面128個(gè)數(shù)字不用白不用!
這些童鞋各自有各自的想法,這就導(dǎo)致了當(dāng)時(shí)銷(xiāo)往世界各地的機(jī)器上出現(xiàn)了大量各式各樣的OEM字符集。
?
東方國(guó)度也開(kāi)始用電腦啦:多字節(jié)字符集(MBCS)和中文字符集
時(shí)代在進(jìn)步,東方的國(guó)度也開(kāi)始用電腦了。
對(duì)于歐美國(guó)家的童鞋來(lái)說(shuō),也許ascii足夠了,但是對(duì)于東方國(guó)度,這256個(gè)字符遠(yuǎn)遠(yuǎn)不夠的。
但是東方的人民是無(wú)敵的!很快變發(fā)明了多字節(jié)編碼方式。例如中國(guó)使用的就是雙字節(jié)字符集編碼。
?
繼續(xù)進(jìn)步!中國(guó)的漢字
中國(guó)童鞋們的漢字系統(tǒng)是博大精深,數(shù)量也是比26個(gè)字母多了不知道多少倍,但是一切困難在中國(guó)童鞋面前都是紙老虎!是紙老虎!
?
?
GB2312
用于簡(jiǎn)體中文,一共收錄了7445個(gè)字符,包括6763個(gè)漢字和682個(gè)其它符號(hào)。漢字區(qū)的內(nèi)碼范圍高字節(jié)從B0-F7,低字節(jié)從A1-FE,占用的碼位是72*94=6768。其中有5個(gè)空位是D7FA-D7FE。
?
繁體古文怎么辦?big5
用于繁體中文,
?
56個(gè)民族是一家!GBK1.0和GB18030
GB2312支持的漢字太少。1995年的漢字?jǐn)U展規(guī)范GBK1.0收錄了21886個(gè)符號(hào),它分為漢字區(qū)和圖形符號(hào)區(qū)。漢字區(qū)包括21003個(gè)字符。
2000年的GB18030是取代GBK1.0的正式國(guó)家標(biāo)準(zhǔn)。該標(biāo)準(zhǔn)收錄了27484個(gè)漢字,同時(shí)還收錄了藏文、蒙文、維吾爾文等主要的少數(shù)民族文字。從漢字字匯上說(shuō),GB18030在GB13000.1的20902個(gè)漢字的基礎(chǔ)上增加了CJK擴(kuò)展A的6582個(gè)漢字(Unicode碼0x3400-0x4db5),一共收錄了27484個(gè)漢字。
?
混亂的終結(jié)!Unicode
太多太多的編碼了,慢慢的,全世界的童鞋們發(fā)現(xiàn)沒(méi)有個(gè)統(tǒng)一的標(biāo)準(zhǔn)是沒(méi)法發(fā)展進(jìn)步的,
so!終結(jié)者Unicode出現(xiàn)了。
ISO組織的童鞋們對(duì)全球混亂的編碼標(biāo)準(zhǔn)已經(jīng)忍無(wú)可忍了,所以他們廢了所有的地區(qū)性編碼方案,重新搞一個(gè)包括了地球上所有文化、所有字母和符號(hào)的編碼!他們打算叫它"Universal Multiple-Octet Coded Character Set",簡(jiǎn)稱(chēng) UCS, 俗稱(chēng) "UNICODE"。
Unicode是2個(gè)字節(jié)的,簡(jiǎn)稱(chēng)為UCS。現(xiàn)在用的是UCS-2,即2個(gè)字節(jié)編碼。2個(gè)字節(jié)最多能夠表示65536個(gè)編碼。
這樣太少,所以出現(xiàn)了UCS-4, 即4個(gè)字節(jié)編碼,由原先的65536個(gè)編碼擴(kuò)展至將近100萬(wàn)編碼。
?
UTF8,UTF16和UTF32
UTF,即Unicode Transformer Format,是Unicode代碼點(diǎn)(code point)的實(shí)際表示方式,按其基本長(zhǎng)度所用位數(shù)分為UTF-8/16/32。它也可以認(rèn)為是一種特殊的外部數(shù)據(jù)編碼,但能夠與Unicode代碼點(diǎn)做一一對(duì)應(yīng)。
?
UTF-8是變長(zhǎng)編碼,每個(gè)Unicode代碼點(diǎn)按照不同范圍,可以有1-3字節(jié)的不同長(zhǎng)度。
//UTF-8是壓縮的Unicode編碼方式.
?
UTF-16長(zhǎng)度相對(duì)固定,只要不處理大于\U200000范圍的字符,每個(gè)Unicode代碼點(diǎn)使用16位即2字節(jié)表示,超出部分使用兩個(gè)UTF-16即4字節(jié)表示。按照高低位字節(jié)順序,又分為UTF-16BE/UTF-16LE。
?
UTF-32長(zhǎng)度始終固定,每個(gè)Unicode代碼點(diǎn)使用32位即4字節(jié)表示。按照高低位字節(jié)順序,又分為UTF-32BE/UTF-32LE。
轉(zhuǎn)載于:https://www.cnblogs.com/hailan2012/archive/2012/01/12/2320937.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來(lái)咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
- 上一篇: H3C MSR路由器GRE over I
- 下一篇: 分区表学习三:分区表实际操作心得