關(guān)于各種字符編碼間的關(guān)系
今天看見(jiàn)群里在討論編碼格式的問(wèn)題,然后發(fā)現(xiàn)自己對(duì)這塊了解的有些模糊,雖然知道有Unicode、UTF8、GBK等等,但是他們之間到底是什么關(guān)系,尤其是Unicode和UTF8之間的關(guān)系我一直都是沒(méi)太搞明白。索性花了兩個(gè)小時(shí)查了一下,綜合網(wǎng)上的各種說(shuō)法(各種不大對(duì)的文章很多)總結(jié)了一下字符編碼間的關(guān)系到底是怎么樣的。也了解到,Unicode并不是一種具體的編碼,他是Unicode字符集,UTF是Unicode Transformation Format的縮寫(xiě),具體內(nèi)容如下:
編碼:
一、ASCII碼:最高位為0,占一個(gè)字節(jié),有128個(gè)編碼空間
二、Unicode字符集,Unicode字符集共有三種編碼方式:UTF-8,UTF-16,UTF-32。
Unicode定義了Basic Multilingual Plane(基本多文種平面)和16個(gè)輔助平面,總計(jì)17個(gè)平面,17*65536個(gè)編碼數(shù),U+000000~U+10FFFF。
1、UTF-8:可變長(zhǎng)編碼,是Unicode的一種具體實(shí)現(xiàn),使用1-4個(gè)字節(jié)來(lái)進(jìn)行編碼(2003年11月之前是1-6個(gè)字節(jié)),UTF-8兼容ASCII編碼。
2、UTF-16:可變長(zhǎng)編碼,使用2字節(jié)為63k個(gè)常見(jiàn)字符編碼,并使用4字節(jié)為不常見(jiàn)字符編碼。在BMP(基本多文種平面)中和UCS-2完全一樣,UTF-16是支持多平面的因此可以說(shuō)是UCS-2的父集,java以UTF-16作為內(nèi)存的字符存儲(chǔ)格式。
3、UTF-32:編碼固定占據(jù)4字節(jié),但是范圍限制在000000~10FFFF,因此可以說(shuō)是UCS-4的一個(gè)子集。
三、UCS字符集不是Unicode,但1991年之后,兩者實(shí)際上已經(jīng)合并。
UCS編碼:UCS-2,UCS-4
1、UCS-4:固定4字節(jié)
2、UCS-2:固定2字節(jié)
四、GBK編碼(國(guó)標(biāo)碼)是國(guó)內(nèi)擴(kuò)展于GB2312的一種編碼格式,主要是為了支持中文,英文兼容ASCII編碼,英文占一個(gè)字節(jié),擴(kuò)展編碼占兩個(gè)字節(jié),編碼范圍在8140-FEFE。