資源描述:
《unicode 字符集與它的編碼方式》由會員上傳分享,免費在線閱讀,更多相關(guān)內(nèi)容在行業(yè)資料-天天文庫。
1、編碼字符集:編碼字符集是一個字符集,它為每一個字符分配一個唯一數(shù)字。Unicode標(biāo)準(zhǔn)的核心是一個編碼字符集,字母“A”的編碼為004116和字符“”的編碼為20AC16。Unicode標(biāo)準(zhǔn)始終使用十六進制數(shù)字,而且在書寫時在前面加上前綴“U+”,所以“A”的編碼書寫為“U+0041”。?1ASCII碼???我們知道,在計算機內(nèi)部,所有的信息最終都表示為一個二進制的字符串。每一個二進制位(bit)有0和1兩種狀態(tài),因此八個二進制位就可以組合出256種狀態(tài),這被稱為一個字節(jié)(byte)。也就是說,一個字節(jié)一共可以用來表示256種不同的狀態(tài),每一個狀態(tài)對應(yīng)
2、一個符號,就是256個符號,從0000000到11111111。??上個世紀(jì)60年代,美國制定了一套字符編碼,對英語字符與二進制位之間的關(guān)系,做了統(tǒng)一規(guī)定。這被稱為ASCII碼,一直沿用至今。ASCII碼一共規(guī)定了128個字符的編碼(準(zhǔn)確地說ASCII碼是一個編碼字符集),比如空格“SPACE”是32(二進制00100000),大寫的字母A是65(二進制01000001)。這128個符號(包括32個不能打印出來的控制符號),只占用了一個字節(jié)的后面7位,最前面的1位統(tǒng)一規(guī)定為0。后128個稱為擴展ASCII碼,目前許多基于x86的系統(tǒng)都支持使用擴展ASCI
3、I碼。??256個ASCII碼中的后128個擴展碼可定制用來表示特殊字符和非英語字符,GB2312就是利用這后面的128個擴展字符來表示漢字,[161,254]共94個字符來組成雙字節(jié)來表示簡體漢字字符表。2Unicode編碼字符集??光是英語字符ASCII編碼字符集是夠了,但是如果算上世界上其他的語言的字符,ASCII碼顯然不夠了,于是Unicode編碼字符集應(yīng)運而生。??Unicode用數(shù)字0-0x10FFFF來映射這些字符,最多可以容納1114112個字符,或者說有1114112個碼位。碼位就是可以分配給字符的數(shù)字。UTF-8、UTF-16、UTF
4、-32都是將數(shù)字轉(zhuǎn)?換到程序數(shù)據(jù)的編碼方案。?3UTF-8?http://zh.wikipedia.org/wiki/UTF-8?????Unicode編碼字符集只是統(tǒng)一定義了所有字符和它對應(yīng)Unicode編碼值,而我們的程序中怎么去存儲和讀取這個Unicode編碼值呢?顯然,你可以直接統(tǒng)一規(guī)定所有Unicode編碼值用四個字節(jié)來存儲。但是這樣的話,對于Unicode編碼字符集中的與ASCII碼表對應(yīng)的那部分字符(只需要一個字節(jié)來表示的Unicode編碼值)就有點浪費了。這樣,utf-8也就粉墨登場了。??UTF-8最大的一個特點,就是它是一種變長的編碼
5、方式。它可以使用1~4個字節(jié)表示一個符號,根據(jù)不同的符號而變化字節(jié)長度。Unicode符號范圍
6、UTF-8編碼方式(十六進制)
7、(二進制)--------------------+---------------------------------------------00000000?~?0000007F
8、0xxxxxxx??????????????--------7bit00000080?~?000007FF
9、110xxxxx10xxxxxx???-------11bit00000800?~?0000FFFF
10、1110xxxx10xxxxxx10xx
11、xxxx?-----16bit00010000?~?0010FFFF
12、11110xxx10xxxxxx10xxxxxx10xxxxxx?----21bitUTF-8編碼規(guī)則:1>對于Unicode編碼值的二進制位數(shù)小于等于7的情況,用一個字節(jié)來表示這個Unicode編碼值,字節(jié)的第一位設(shè)為0,后面7位為這個符號的unicode碼。因此對于英語字母,UTF-8編碼和ASCII碼是相同的。2>對于Unicode編碼值的二進制位數(shù)大于等于8并且小于等于11的情況,用兩個字節(jié)來表示,第一個字節(jié)的前兩位都設(shè)為1,第兩+1位設(shè)為0,第二個字節(jié)的前兩位設(shè)為10。剩下的
13、沒有提及的二進制位,全部填充這個符號對應(yīng)的unicode碼。3>?以此類推,對于需要n個utf-8字節(jié)來表示的的符號(n>1),第一個字節(jié)的前n位都設(shè)為1,第n+1位設(shè)為0,后面字節(jié)的前兩位一律設(shè)為10。剩下的沒有提及的二進制位,全部填充這個符號對應(yīng)的unicode碼。?utf-8編碼長度最大為四個字節(jié),所以最多只能表示Unicode編碼值的二進制數(shù)為21位的Unicode字符。4.UTF-16?????http://zh.wikipedia.org/wiki/UTF-16??16進制編碼范圍UTF-16表示方法(二進制)10進制碼范圍字節(jié)數(shù)量U+000
14、0---U+FFFFxxxxxxxxxxxxxxxx0-655352U+1000