趙云叫化凍?曹操叫變巨?一文帶你讀懂字符編碼那些事兒
本文轉載自微信公眾號「活在信息時代」,作者活在信息時代。轉載本文請聯(lián)系活在信息時代公眾號。
早期玩光榮三國游戲的同學一定會對游戲中人物名稱的亂碼印象非常深刻。例如說《三國志曹操傳》,里面的曹操名字變成了“變巨”,而趙云的名字則變成了“化凍”。其它的人物名字也都是亂碼。
盡管如此,也擋不住一款優(yōu)秀的戰(zhàn)略游戲對于玩家的吸引力。很多玩家會在亂碼的情況下,靠猜測和不屈的意志堅持玩下去。而一些懂一點技術的同學則會使用各種轉碼工具,將亂碼轉換成可以閱讀的繁體字。
那么為什么會出現(xiàn)這種亂碼的情況呢?那就要從計算機對于字符的存儲格式開始說起了。
我們知道計算機是以二進制方式存儲數據的。而字符編碼則決定了同樣的二進制數據計算機顯示出來字符具體是什么。例如最簡單的ASCII碼,二進制數0100 0001,也就是16進制的0x41,就代表字母A。所以如果計算機看到這串二進制,又是以ASCII編碼的話,那就會把它顯示成A。同時的,0110 0001,即16進制的0x61就代表字母a。
那么如果有另一種編碼,把0100 0001這串二進制給定義成“一”的話,那么以這種編碼格式讀取的這串二進制,就會顯示成“一”了。
這就是為什么早期的老游戲會出現(xiàn)亂碼問題了。原因就在于,那些游戲多數是以臺灣的Big5繁體字編碼編成的,而在我們的電腦上,則以大陸的GBK簡體編碼顯示,那就出問題了。
下面小編就用Mysql數據庫自帶的轉碼函數,給大家演示一下,“化凍”是怎么變成趙云的。
第一步:我們先查出化凍的16進制編碼
這里面hex函數用于顯示字符串的16進制編碼,convert函數將化凍兩個字用gbk格式編碼。
執(zhí)行之后,我們得到化凍兩個字在gbk編碼下的16進制表示。
我們可以看到BBAFB6B3,就是化凍兩個字在gbk編碼下的16進制表示了。如果轉換成二進制的話即為1011 1011 1010 1111 1011 0110 1011 0011。
第二步:將16進制編碼轉換成big5碼
這里面,我們把剛才查找出來的化凍兩個字對應的16進制數字轉換成big5碼格式,看看big5碼里面,這串16進制數字代表什么。于是我們看到,在big5碼里,這串數字被顯示成了繁體字的趙云。這樣,我們就看到了為什么在一些老游戲里面,用big5碼開發(fā)的游戲,在大陸的簡體中文系統(tǒng)上,為什么會變成亂碼了。
同樣的,我們可以查到變巨的16進制,以及對應的big5碼。
類似的還有
而現(xiàn)在,由于硬件價格的大幅下降,大部分軟件都已經使用unicode開發(fā)了,于是可以在世界上大部分的電腦上使用。然而依然還有一些軟件,在一些情況下還會有編碼問題哦。例如說最新版的Mysql,在中文windows操作系統(tǒng)的電腦上,如果電腦名使用了中文字符的話,就會出現(xiàn)安裝錯誤哦。