ASCII GBK2312 GBK | UNICODE UTF-8 UTF-16 區(qū)別 關(guān)系
Posted on 2010-12-17 10:50 kangaroo 閱讀(1247) 評(píng)論(0) 編輯 收藏 所屬分類: programmerASCII是最初的計(jì)算機(jī)指定的一套符號(hào)編碼,使用一個(gè)字節(jié)其中的7位,128個(gè)數(shù)值代表不同字符,對(duì)于英語(yǔ)這個(gè)已經(jīng)是足夠,
但是對(duì)于其他國(guó)家的語(yǔ)言,卻遠(yuǎn)遠(yuǎn)不夠,如漢語(yǔ),日語(yǔ),韓語(yǔ),所以就出現(xiàn)了非ASCII的字符編碼,如gbk2312,gbk的漢字編碼。這些非ascii的編碼都是兼容ascii128個(gè)符號(hào)編碼的。
------------------------------------------------------------------------------------------------------------------------------------------------------
UNICODE首先只是一個(gè)字符集,它的出現(xiàn)就是因?yàn)楦鱾€(gè)國(guó)家出臺(tái)自己的語(yǔ)言編碼,為了統(tǒng)一這些所有語(yǔ)言,可以理解unicode是涵蓋各個(gè)國(guó)家字符的集合,現(xiàn)在的規(guī)模可以容納100多萬(wàn)個(gè)符號(hào)。需要說(shuō)明的是,定長(zhǎng)編碼便于計(jì)算機(jī)處理(注意GB2312/GBK不是定長(zhǎng)編碼),而unicode又可以用來(lái)表示所有字符,所以在很多軟件內(nèi)部是使用unicode編碼來(lái)處理的,比如java。
unicode只是一個(gè)符號(hào)集,只規(guī)定了符號(hào)的二進(jìn)制代碼,卻沒有規(guī)定這個(gè)二進(jìn)制代碼應(yīng)該如何存儲(chǔ),即編碼方式,常見的有utf-8和utf-16。
(如果unicode規(guī)定,每個(gè)符號(hào)用三個(gè)字節(jié)表示,那么英文字母只占用一個(gè)字節(jié),就浪費(fèi)很多存儲(chǔ)空間。)
UTF-8就是一種變長(zhǎng)的編碼方式,它使用1~4個(gè)字節(jié)表示一個(gè)符號(hào),根據(jù)不同的符號(hào)而變化字節(jié)長(zhǎng)度。
我們常用的記事本功能,在"save as"的時(shí)候,可以選擇不同的編碼方式,里面有四個(gè)選擇:ansi,unicode,unicode big endian,utf-8:
1.ANSI是默認(rèn)的編碼方式。對(duì)于英文文件是ASCII編碼,對(duì)于簡(jiǎn)體中文文件是GB2312編碼(只針對(duì)Windows簡(jiǎn)體中文版,如果是繁體中文版會(huì)采用Big5碼)。
2.Unicode編碼指的是UCS-2編碼方式,即直接用兩個(gè)字節(jié)存入字符的Unicode碼。這個(gè)選項(xiàng)用的little endian格式。
3.Unicode big endian編碼與上一個(gè)選項(xiàng)相對(duì)應(yīng)。我在下一節(jié)會(huì)解釋little endian和big endian的涵義。
4.UTF-8編碼,也就是上一節(jié)談到的編碼方法。
參考:
http://www.cnblogs.com/pony/archive/2009/02/05/1384323.html
http://blog.chinaunix.net/u1/56156/showart_2245355.html
http://liaoshaoyao.javaeye.com/blog/667056