第七章 諜戰(zhàn)風(fēng)云
屏幕上出現(xiàn)了一些亂七八糟的字符,根本就不是我的名字。以我這點(diǎn)微末道行,自然只能向老爹發(fā)出求助的眼神。
「再試試呢?」
老爹掃了小黑屏一眼后,快速按下了Ctrl+Shift+C,然后讓我重新編譯執(zhí)行,小黑屏上果然出現(xiàn)了我的名字。
「老爹,這是怎么回事兒啊,怎么你就按了Ctrl+Shift+C問(wèn)題就解決了?」
我好奇地問(wèn)道。
「玥玥啊,為了讓你更容易理解,老爹就用故事的形式為你解釋這個(gè)問(wèn)題吧。」
「好啊好啊,我最喜歡聽(tīng)故事了?!?p> 我拍手叫好道。
「嗯嗯,話說(shuō)在第二次世界大戰(zhàn)時(shí)期,很多國(guó)家都是使用的無(wú)線電報(bào)來(lái)傳輸情報(bào)。這個(gè)無(wú)線電報(bào)呢,使用的是摩斯碼來(lái)傳輸26個(gè)字母10個(gè)數(shù)字。
但是呢,由于大家都使用摩斯碼,所以發(fā)送報(bào)文的方式都相同,這樣就很容易被破譯了。而在傳輸情報(bào)時(shí)一旦被敵人截取、破譯,將會(huì)造成難以預(yù)計(jì)的可怕后果。所以在軍事上使用無(wú)線電報(bào),不會(huì)直接傳輸字母。
當(dāng)然,對(duì)于我們國(guó)家來(lái)說(shuō),根本就沒(méi)有辦法直接用摩斯碼傳輸情報(bào),因?yàn)槟λ勾a里面沒(méi)有漢字。像日本、韓國(guó)這些國(guó)家的文字有很大一部分都是漢字,所以他們同樣不能直接使用無(wú)線電報(bào)傳輸情報(bào)。
那怎么辦呢?
于是當(dāng)時(shí)有聰明的人就給每一個(gè)漢字編號(hào),在傳輸情報(bào)的時(shí)候只傳輸漢字編號(hào),收?qǐng)?bào)的人在接收到了漢字的編號(hào)后再在根據(jù)編號(hào)還原成文字,就知道報(bào)文內(nèi)容了。
因?yàn)槌S玫臐h字有6700多個(gè),而給漢字編碼又沒(méi)有什么規(guī)律可言,所以常人幾乎不可能憑借記憶記住這么多漢字的編號(hào),只能以書(shū)面形式記錄下來(lái)。而記錄漢字和編號(hào)對(duì)應(yīng)關(guān)系的書(shū)冊(cè),就被稱之為密碼本。
也就是說(shuō),只要獲取了密碼本,就能夠破譯電報(bào)傳輸?shù)膬?nèi)容了。
為了安全考慮,情報(bào)組織會(huì)不定時(shí)的更換密碼本。」
「嗯嗯,這個(gè)我知道。在和爺爺奶奶看抗日題材電視劇的時(shí)候,經(jīng)??吹饺毡镜拈g諜和特務(wù)總是想方設(shè)法獲取八路軍的密碼本,而八路軍則是要想盡一切辦法保護(hù)密碼本的安全?!?p> 「是這樣的,所以當(dāng)有己方的情報(bào)人員被敵方抓獲后,情報(bào)組織就會(huì)馬上更換密碼本。假設(shè)在沒(méi)有更換密碼本時(shí)漢字和編號(hào)的關(guān)系如下:放-47045,假-48345,一-53947,周-55004,這個(gè)時(shí)候收?qǐng)?bào)方能夠正確的解析出發(fā)報(bào)方要表達(dá)的意思。
現(xiàn)在因?yàn)槊艽a本有泄露的危險(xiǎn),于是更換了密碼本。新的密碼本中漢字和編號(hào)的對(duì)應(yīng)關(guān)系發(fā)生了變化:馬-47045,上-48345,進(jìn)-53947,攻-55004,但是敵人拿到了更換前的密碼本,所以他們接收到的消息就還是放假一周,卻不知道真正的意思是馬上進(jìn)攻。
昨天我和你說(shuō)過(guò)字符顯示的原理,每個(gè)字符都有自己的編號(hào),就像是密碼本一樣,不過(guò)計(jì)算機(jī)上不叫密碼本,而叫編碼格式。但是計(jì)算機(jī)是美國(guó)人發(fā)明的,所以他們制定的密碼本只有字母、數(shù)字和一些符號(hào),總共128個(gè)字符,用一個(gè)字節(jié)就可以表示了。而這就是赫赫有名的ASCII碼表。
隨著計(jì)算機(jī)的普及,越來(lái)越多的國(guó)家對(duì)ASCII碼表進(jìn)行擴(kuò)展,制定了用于表示自己語(yǔ)言的編碼表。
而我們國(guó)家因?yàn)闈h字太多,單是常用的漢字就有6700多個(gè),而一個(gè)字節(jié)只能表示256個(gè)字符,遠(yuǎn)遠(yuǎn)不夠。而兩個(gè)字節(jié)能表示256x256=65536個(gè)字符,所以至少要用兩個(gè)字節(jié)才能給這些常用字編上號(hào)。為了兼容ASCII碼,所以漢字干脆直接使用兩個(gè)字節(jié)表示,后來(lái)就演變成了GBK編碼表。電腦只需要判斷第一個(gè)字節(jié)是否大于127就知道是ASCII碼還是漢字了。
其他國(guó)家差不多也是這么干的,但因?yàn)闆](méi)有統(tǒng)一的標(biāo)準(zhǔn),這就導(dǎo)致同一個(gè)編號(hào)可能在不同的密碼本中表示不同的含義。
這個(gè)時(shí)候有個(gè)組織就跳出來(lái)了,它制定了一種新的編碼,幾乎包括了全世界所有國(guó)家的語(yǔ)言,也就是萬(wàn)國(guó)碼。
只是一開(kāi)始不是所有人都愿意使用萬(wàn)國(guó)碼,因?yàn)閷?duì)于西方的國(guó)家來(lái)說(shuō),明明只需要一個(gè)字節(jié)來(lái)表示一個(gè)字母,用萬(wàn)國(guó)碼就需要兩個(gè)字節(jié),太浪費(fèi)內(nèi)存了。直到萬(wàn)國(guó)碼發(fā)展到第8個(gè)版本時(shí)才流行了起來(lái),也就是utf-8編碼?!?p> 「哇哦,原來(lái)是這樣。那剛剛在小黑屏里面顯示我名字亂碼,是不是就是密碼本對(duì)不上啊?」
我摸著自己的下巴下意識(shí)說(shuō)道。
「聰明!我們?cè)诒4嫖谋局埃枰O(shè)定其保存編碼格式。同樣,在打開(kāi)文本之前也要設(shè)置讀取文本編碼格式。只有保存和讀取的編碼一致時(shí),電腦才能顯示出來(lái)正確的內(nèi)容。
sublime默認(rèn)使用的是utf-8編碼來(lái)打開(kāi)和保存文本,而小黑屛則是GBK。
假設(shè)在utf-8中任字的編碼是1314,靈是0520,玥是1413。小黑屏在顯示這三個(gè)字符時(shí),它將1314、0520、1413這三個(gè)編號(hào)拿到GBK編碼表里比對(duì),結(jié)果就是你剛剛看到的那三個(gè)亂七八糟的字了。」
「那要解決這個(gè)問(wèn)題的關(guān)鍵就是要統(tǒng)一密碼本咯?」
「對(duì)頭?!?p> 老爹滿意的笑了笑。
「如此說(shuō)來(lái),有兩種方案可以解決這個(gè)問(wèn)題,一是修改sublime保存時(shí)的密碼本,二是修改小黑屏讀取時(shí)的密碼本。
老爹你既然是在sublime中進(jìn)行的操作,想必是采用的方案一了。如果我的推理沒(méi)有錯(cuò)的話,Ctrl+Alt+C就是sublime修改保存密碼本為GBK的快捷鍵!」
「厲害,厲害,不過(guò)這畫(huà)風(fēng)有點(diǎn)似曾相識(shí)啊!」
老爹拍手叫好,贊揚(yáng)之情溢于言表。
「哼哼,你以為我?guī)装偌履习卓戳??我還做了筆記的?!?p> 得到老爹的表?yè)P(yáng),我有些得意地說(shuō)道。
「納尼?你……做筆記是幾個(gè)意思?」
「這都不知道啊,以后哪個(gè)敢欺負(fù)我,我就一筆記拍ta臉上,然后跟ta說(shuō),姐可是看過(guò)1000多集柯南的人,精通800多種殺人手法,700多種不在場(chǎng)證明。上一個(gè)這么對(duì)姐的人墳草都一丈高了,兇手到現(xiàn)在都沒(méi)有找到。
咦,老爹,你怎么流了這么多汗啊,是不是身體不舒服……」