你也許見(jiàn)過(guò)跟別的字格格不入的孤寡文字,打開(kāi)過(guò)全是看不懂的字符的文檔,全是框框的游戲?qū)υ捑咦常c(diǎn)擊過(guò)跟真網(wǎng)址一模一樣的釣魚(yú)網(wǎng)站。所有的這些都跟電腦顯示文字的原理有關(guān)哈蝇。
電腦顯示文字涉及到三個(gè)重要的概念:字符棺妓、字符集、字符編碼炮赦。一個(gè)漢子一個(gè)拉丁字母怜跑,一個(gè)數(shù)字都是一個(gè)字符;這些字符集合起來(lái)叫做字符集吠勘,通常來(lái)說(shuō)性芬,一個(gè)字符集里沒(méi)有相同的字符。而這些字符計(jì)算機(jī)一個(gè)也不認(rèn)識(shí)剧防,為了讓計(jì)算機(jī)認(rèn)識(shí)這些字符植锉,我們就需要把這些字符用0和1表示出來(lái),把字符轉(zhuǎn)換成0和1的規(guī)則就是字符編碼峭拘。
計(jì)算機(jī)存儲(chǔ)數(shù)據(jù)的基本單位是字節(jié)俊庇,也就是byte,一個(gè)字節(jié)有8個(gè)二進(jìn)制位組成鸡挠,也就是8個(gè)bit辉饱,共有256種狀態(tài),也就是一個(gè)字節(jié)可以存儲(chǔ)256個(gè)字符宵凌,而英文字符只有26個(gè)鞋囊,所以在上世紀(jì)60年代,美國(guó)先作出了美國(guó)信息交換碼簡(jiǎn)稱(chēng)ASCLL瞎惫,共收錄了128個(gè)字符溜腐。但當(dāng)各國(guó)進(jìn)入信息化社會(huì)的時(shí)候,就出現(xiàn)了問(wèn)題瓜喇,各國(guó)搞的EASCLL后面的128個(gè)字符都不太一樣挺益,這樣就導(dǎo)致了在同一碼位上的字符可能不一致,所以同一個(gè)文本放到不同的計(jì)算機(jī)中打開(kāi)可能顯示結(jié)果不一樣乘寒。但當(dāng)信息化來(lái)的中日韓三國(guó)時(shí)望众,字符太多,就會(huì)導(dǎo)致一個(gè)字符集存不完這些字符伞辛,就我國(guó)發(fā)布的GB 2312-80中就包含了6763個(gè)常用簡(jiǎn)體漢字烂翰,所以GB 2312用兩個(gè)字節(jié)長(zhǎng)度來(lái)編碼一個(gè)字符,這樣理論上就可以容納65536個(gè)字符蚤氏,但GB 2312-80中只是最最常用的漢字甘耿,有一些姓氏根本沒(méi)在其中,還有繁體字竿滨,導(dǎo)致這些字根本打不出來(lái)佳恬。在今天新的字符集已經(jīng)包含了部分生僻字,但顯示出來(lái)跟正常字體不一樣于游。很多字體都還只適配GB 2312中的字符毁葱,后來(lái)微軟設(shè)計(jì)了漢字內(nèi)碼拓展規(guī)范 GBK。又后來(lái)人類(lèi)出現(xiàn)了萬(wàn)國(guó)碼UNICODE贰剥,如今UNICODE已經(jīng)有了1114112個(gè)碼位倾剿。
以上出現(xiàn)了很多的編碼格式,但是用不同的編碼格式就會(huì)導(dǎo)致亂碼的產(chǎn)生蚌成,例如用GBK編碼發(fā)送柱告,而 另一個(gè)人是使用UTF-8去解碼,就會(huì)出現(xiàn)亂碼問(wèn)題笑陈。