作者:天一閣圖書管理員
最近使用python導(dǎo)數(shù)據(jù)藐石,從一個(gè)latin1的數(shù)據(jù)庫導(dǎo)到另一個(gè)latin1的數(shù)據(jù)庫递览,遇到像“漩偑”這樣的字符的時(shí)候簡直是痛不欲生执虹。怎么導(dǎo)怎么報(bào)錯(cuò)岳锁,如果忽略轉(zhuǎn)碼錯(cuò)誤又會(huì)出現(xiàn)缺少字符的情況潘拨〉跏洌花了幾天時(shí)間才完全解決這個(gè)問題,至于是怎么解決的需要另寫一篇python的文章來解釋了铁追。還是先練一下基本功吧......
計(jì)算機(jī)一開始是只支持ascii碼表的季蚂。而Latin1在ascii的基礎(chǔ)上添加了一些字符,ascii表示的是0-126這個(gè)范圍。但latin1表示的范圍是0x0-0xFF扭屁。因此latin1就能表示所有的單字節(jié)字符算谈。
計(jì)算發(fā)展的過程中,有一段時(shí)間字符集是沒有標(biāo)準(zhǔn)的料滥,不少語言都是自己搞了一套然眼,就像大陸和臺(tái)灣使用的簡繁體一樣。那時(shí)候在windows上字符是使用DBCS來表示的葵腹。DBCS就是雙字節(jié)字符集高每,使用雙字節(jié)來表示字符。
gb2312是1980年定義的規(guī)范践宴,可想而知它有多古老了......使用16位來表示字符鲸匿,收錄了6763個(gè)漢字,682個(gè)字符阻肩,在那個(gè)時(shí)候带欢,它支持的字符是有限的,也不支持繁體烤惊,當(dāng)然也僅用于大陸地區(qū)乔煞,可能也被新加坡使用。
GBK是微軟制定的柒室,1995年用于windows95上渡贾,這個(gè)也比較古老了......也是16位字符集,收錄21003個(gè)漢字伦泥。擴(kuò)容了很多了剥啤。GBK是向下兼容GB2312的〔桓可以支持簡繁體共存府怯。
GB18030是國家規(guī)定的標(biāo)準(zhǔn),時(shí)間是2000年防楷,這個(gè)算是最新的標(biāo)準(zhǔn)牺丙,為了包含少數(shù)民族們使用的文字而制定的。GB18030是向下兼容GBK的复局。32位字符集冲簿,收錄了27553個(gè)漢字。同時(shí)收錄了藏文亿昏、蒙文峦剔、維吾爾文等主要的少數(shù)民族文字。 而到了這個(gè)時(shí)候角钩,windows內(nèi)核統(tǒng)一使用unicode了吝沫,不再是以前那種DBCS表示方式了呻澜。
因?yàn)楦鱾€(gè)國家或者說民族都自己定義自己的字符集,給操作系統(tǒng)廠商和軟件商還有用戶帶來了很大的困擾惨险。字符集的標(biāo)準(zhǔn)化也開始了羹幸。unicode使用4字節(jié)來表示一個(gè)字符,也就是'a'這個(gè)字符也要使用32位來表示辫愉。這樣的話它在理論上表示世界上所有的字符栅受,而且不會(huì)出現(xiàn)沖突。每個(gè)字符都有自己獨(dú)特的位置恭朗。
unicode發(fā)布以后屏镊,遲遲得不到推廣,因?yàn)樗即鎯?chǔ)和內(nèi)存了痰腮。后來硬盤和內(nèi)存白菜價(jià)了以后闸衫,才慢慢被接受。而為了解決unicode占位太大的問題诽嘉,出現(xiàn)了不同的UCS Transformation Format,就是unicode轉(zhuǎn)換格式弟翘。utf-8就是其中一種虫腋,utf-8是一種可變長的字符表達(dá)方式。
Unicode符號(hào)范圍 | UTF-8編碼方式
(十六進(jìn)制) | (二進(jìn)制)
—————————————————————–
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
可見的是稀余,unicode值越大的字符悦冀,使用的存儲(chǔ)空間就越大。utf-8不是一種字符集睛琳,而是一種字符集的轉(zhuǎn)換方式盒蟆,用來節(jié)省空間的。