起源
我們都知道計算機誕生于美國评姨;起初硫眯,美國人想到了用8位作為一個字節(jié)來傳輸數(shù)據(jù),并使用0~127表示他們常用的文字與符號裹纳,其中也包括$(美元符號);并將這份編碼表作為一個標準在美國流通起來,人們把這份編碼稱之位美國標準信息交換碼American Standard Code for Information Interchange
滥酥,它的縮寫我們大家可能都耳熟能詳刊头,叫做ASCII
碼表污尉。
英文字母對應ASCII碼
A-Z:65~90,a~z:97~122
發(fā)展
后來,這邊編碼流傳到了歐洲被碗,英國人發(fā)現(xiàn)當前編碼沒有辦法表示£(英鎊符號)蔼囊,正好ASCII也只用過了0 ~ 127酱酬,于是他們把128 ~ 255也應用了起來,所以128 ~ 255被稱為ASCII擴展碼挑社;信息的魅力在于傳播跟應用腮敌,這份字符集也傳入了中國斗这,中國文化博大精深啤斗,源遠流長彼水,常用漢字6000+盯桦,全部漢字有數(shù)萬個卖子;我們維持了0 ~ 127的原意,并毫不客氣的將127位之后的雜七雜八的符號全部取消掉羽利,當兩個大于127的字符在一起時就表示一個漢字泽疆;前面一個字節(jié)稱之為高位(0xA1 ~ 0xF7),后面一個字節(jié)稱之為低位(0xA1 ~ 0xFE)捌年;這份編碼便是鼎鼎有名的GB2312,其實是ASCII的中文擴展眠砾。
然而漢字實在是太多了褒颈,隨后他們干脆不再要求低位必須大于127刨疼;對GB2312又進行了一次擴展漩绵,這份擴展被稱為GBK,GBK完全兼容GB2312,并新增了2W多個漢字;再后來少數(shù)民族也開始使用計算機厌漂,我們又加入了少數(shù)民族的文字,GBK又被擴展成了GB18030斟珊;從此之后苇倡,中華大地的文明便可以在計算機的世界里流通了;由于是有兩個字節(jié)組成的,所以被稱為雙字節(jié)字符集Double Byte Charecter Set
簡稱DBCS
雏节,所以早年就有了一個漢字胜嗓,兩個字符
的計算機口訣。
就這樣每個國家和地區(qū)都有了一套自己的擴展钩乍,各個擴展之間互不兼容辞州,所以有一個組織國際標準化組織(ISO),開始關注并著力于解決這一問題寥粹。于是变过,他們廢除各地區(qū)的編碼標準,準備自己擼起袖子涝涤,起草一份統(tǒng)一的編碼媚狰,屆時計算的存儲容量也得到了發(fā)展,他們于是直接大方的規(guī)定有兩個字節(jié)表示一個字符阔拳,并旨在統(tǒng)一表示地球上所有的文字與符號崭孤,它也有一響亮的名字,Universal Multiple-Octet Coded Character Set
糊肠,簡稱 UCS
, 俗稱 unicode
辨宠。
升華
但是,所有的字符都需要占用兩個字節(jié)货裹,英文等需要的存儲空間較原來增加了一倍嗤形,一向精打細算的人們不愿意了。unicode
在很長一段時間內(nèi)無法推廣弧圆,直到互聯(lián)網(wǎng)的出現(xiàn)赋兵,為解決unicode如何在網(wǎng)絡上傳輸?shù)膯栴},出現(xiàn)了UCS Transfer Format
簡稱UTF
搔预;顧名思義UTF-8
就是表示每8位傳輸數(shù)據(jù)霹期,UTF-16
表示每16位傳輸數(shù)據(jù);這樣使得編碼無國界拯田,可以傳輸全世界所有文化的字符历造,從此漢字不在是兩個字符,而是一個字符勿锅。
UTF-8
最大的一個特點帕膜,就是它是一種變長的編碼方式枣氧。它可以使用1 ~ 4個字節(jié)表示一個符號溢十,根據(jù)不同的符號而變化字節(jié)長度,當字符在ASCII碼的范圍時达吞,就用一個字節(jié)表示张弛,保留了ASCII字符一個字節(jié)的編碼做為它的一部分,注意的是unicode一個中文字符占2個字節(jié),而UTF-8一個中文字符占3個字節(jié))吞鸭。從unicode到uft-8并不是直接的對應寺董,而是要過一些算法和規(guī)則來轉(zhuǎn)換。
從unicode到uft-8并不是直接的對應刻剥,而是要過一些算法和規(guī)則來轉(zhuǎn)換遮咖。
Unicode符號范圍(2個字節(jié)) | UTF-8編碼方式 (1~4個字節(jié))
(十六進制) | (二進制)
—————————————————————–
0000 0000-0000 007F | 0xxxxxxx
0000 0080-0000 07FF | 110xxxxx 10xxxxxx
0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx