想必大家都聽說過:“在電腦的眼中一切都是0和1組成的二進(jìn)制數(shù)字”继找,那么大家又沒有想過像“abcd你我他”這樣的字母或者漢字這些字符在電腦眼里是什么樣的呢齐佳?
前面的這句話不假雇卷,在電腦眼中一切都是由0和1組成的二進(jìn)制數(shù)字苗踪,字母和漢字也是一樣跪者,他們在電腦眼里也都是二進(jìn)制數(shù)字。那么計(jì)算機(jī)是怎么知道某個(gè)二進(jìn)制數(shù)字究竟是哪個(gè)字母或者漢字的呢妹卿?
想必大家都有身份證旺矾,也都有身份證號吧蔑鹦?每個(gè)身份證號都與一個(gè)人有確定的對應(yīng)關(guān)系,通過身份證號可以準(zhǔn)確的區(qū)分每一個(gè)人箕宙。對計(jì)算機(jī)來說也是如此嚎朽,每個(gè)字符在電腦里都有自己的“身份證號”,通過這個(gè)“身份證號”電腦可以識別和管理這些字符柬帕。當(dāng)然哟忍,在電腦眼里,這些“身份證號”都是二進(jìn)制的數(shù)字陷寝。
這些二進(jìn)制數(shù)字就是字符所對應(yīng)的字符編碼锅很。
一個(gè)字符在計(jì)算機(jī)里對應(yīng)的二進(jìn)制編碼并不是固定的,會受到編碼方式的影響凤跑,一個(gè)字符經(jīng)過不同的編碼方式編碼后得到的二進(jìn)制數(shù)字很可能并不一樣粗蔚。就好像在學(xué)校上學(xué)時(shí),學(xué)校會給我們一個(gè)學(xué)號饶火,這個(gè)學(xué)號就是用學(xué)校的方式給我們進(jìn)行編碼編號鹏控。而我們的身份證號則是用另一種方式給我們進(jìn)行編碼編號,這兩種編碼方式并不相同肤寝,所以得到的號碼也都不一樣当辐,但都對應(yīng)具體的某個(gè)人。
字符編碼也是一樣鲤看,一個(gè)字符通過不同的編碼方式編碼缘揪,得到的二進(jìn)制數(shù)字也許會不一樣,但都能表示同一個(gè)字符义桂。就比如“我”這個(gè)字符找筝,使用UTF-8的方式進(jìn)行編碼得到的二進(jìn)制數(shù)字是“111001101000100010010001”,而使用GB18030編碼出的二進(jìn)制數(shù)為“1100111011010010”慷吊。雖然這兩串?dāng)?shù)字并不相同袖裕,但在各自的編碼里都表示著“我”這個(gè)漢字。
反過來說溉瓶,雖然兩串?dāng)?shù)字并不相同急鳄,但是計(jì)算機(jī)通過使用對應(yīng)的UTF-8和GB18030編碼方式可以將這兩串?dāng)?shù)字識別成同一個(gè)漢字——“我”。
那么問題來了堰酿,如果一個(gè)字符通過一種編碼方式編碼成二進(jìn)制數(shù)字疾宏,再通過通過另一種編碼方式對這個(gè)二進(jìn)制數(shù)進(jìn)行識別會發(fā)生什么呢?
答案是極有可能會識別錯誤触创,可能根本識別不出這個(gè)字符坎藐,或者把這個(gè)字符錯誤的識別成了其他的字符,除非這個(gè)字符經(jīng)過兩種編碼方式編碼后的二進(jìn)制數(shù)是一樣的哼绑。就好像你去使用身份證號的系統(tǒng)里查找你在學(xué)校里的學(xué)號一樣岩馍,極有可能查不到這個(gè)人碉咆,又或者會查找到某個(gè)身份證號和你的學(xué)號一樣的人。除非你的身份證號和學(xué)號是一樣的兼雄,否則不可能查找到你自己。
同樣的帽蝶,如果一篇文章是通過一種編碼方式進(jìn)行編碼的赦肋,但是計(jì)算機(jī)在識別的時(shí)候卻用其他的編碼方式進(jìn)行識別,這個(gè)時(shí)候計(jì)算機(jī)很可能會把文章識別錯誤励稳,最后展示在電腦屏幕上的文章會出現(xiàn)各種錯誤的字符和奇怪的符號佃乘,從而影響閱讀,這就是文章亂碼問題的原因驹尼。