我很小的時(shí)候有過(guò)一個(gè)想法就是將后綴exe(可執(zhí)行文件)的文件改為txt(文本文件)再打開(kāi)會(huì)發(fā)生什么,這樣做過(guò)的人都知道吧,打開(kāi)后文件會(huì)亂碼.那為什么這些文件打開(kāi)后會(huì)亂碼?既然亂碼了為什么計(jì)算機(jī)依舊能夠執(zhí)行呢?
計(jì)算機(jī)中的數(shù)據(jù)都是以二進(jìn)制存儲(chǔ)的(例如1001) ,這些數(shù)據(jù)要轉(zhuǎn)換成我們能看的東西,這個(gè)過(guò)程叫編碼(ChatGPT這么說(shuō)的,我印象中好像叫編碼應(yīng)該我記錯(cuò)了,但這不重要,如果不是專業(yè)去了解就記住這個(gè)過(guò)程好了),然后這個(gè)轉(zhuǎn)換相當(dāng)于翻譯工作,把0和1組成得數(shù)據(jù)翻譯成屏幕上的內(nèi)容
(相關(guān)資料圖)
如上圖計(jì)算器↑
這里做一下聲明
HEX表示十六進(jìn)制。
DEC表示十進(jìn)制。
OCT表示八進(jìn)制。
BIN表示二進(jìn)制。
在這張圖(P1)中選擇了DEC(十進(jìn)制)并輸入114514(相當(dāng)于把十進(jìn)制zhuan),八進(jìn)制、二進(jìn)制、還有十六進(jìn)制都出來(lái)了,計(jì)算機(jī)就是這么將這些二進(jìn)制數(shù)據(jù)轉(zhuǎn)換的,但是我們?cè)谖谋疚臋n中輸入一些中文內(nèi)容,又是怎么被顯示出來(lái)呢?
我們先拋開(kāi)問(wèn)題來(lái)講另一個(gè)與之相關(guān)的知識(shí)。
相比很多人都知道這個(gè)東西吧,像KB,MB,GB等,這些是比較常用的存儲(chǔ)單位,還有一些比如說(shuō)B(字節(jié)Byte),b(位bit)(大寫(xiě)和小寫(xiě)的b不是同一個(gè)東西?。?!)b的話就是最小單位,1b只能存儲(chǔ)0或1,8個(gè)b又是一個(gè)B,雖然一個(gè)B很小的單位,但它能夠存儲(chǔ)很多東西,比如ASCII,一種計(jì)算機(jī)能夠理解的語(yǔ)言,就是前面所說(shuō)的翻譯工作,在這個(gè)翻譯工作中ASCII如同字典,下面展示了一些Byte代表的ASCII值:
00100000 代表空(沒(méi)有任何東西)
00100001代表!
00100010代表"
00100011代表#
00100100代表$
00100101代表%
00100110代表&
00100111代表'
00101000代表(
00101001代表)
00101010代表*
00101011代表+
現(xiàn)在你們應(yīng)該能夠理解一些特殊的符號(hào)(上面的括號(hào),加減符號(hào)等)怎樣存儲(chǔ)在計(jì)算機(jī)并顯示在電腦屏幕上了。
把話拉回一些。
我們打開(kāi)的txt文件(文本文件)并不是在計(jì)算機(jī)中就長(zhǎng)這樣,他們?cè)臼且淮?和1,只不過(guò)打開(kāi)的過(guò)程中顯示txt文件的程序?qū)⑦@串二進(jìn)制文件轉(zhuǎn)化成"人話"并且顯示出來(lái).
顯示的文字也是這樣,他們經(jīng)過(guò)了一些轉(zhuǎn)變,原來(lái)只是0和1后來(lái)轉(zhuǎn)化成了文字,你們是否好奇0和1是如何轉(zhuǎn)化成文字呢?
這要說(shuō)到另一個(gè)東西了,它叫UTF-8,當(dāng)然還有Unicode,跟上面ASCII的性質(zhì)一樣,也相當(dāng)于字典,但是咱們中國(guó)人的漢字多得很,它們一個(gè)字節(jié)也就八個(gè)bit(打個(gè)比方:1字節(jié)可以這樣表示00000000,每個(gè)0就是一個(gè)bit),這么點(diǎn)用來(lái)表示字母還行(畢竟英語(yǔ)就26個(gè)字母),但是漢字卻不夠,怎么辦呢?一個(gè)字節(jié)不夠就用兩個(gè),兩個(gè)字節(jié)不用就用三個(gè),但是能用少點(diǎn)就少點(diǎn),畢竟每個(gè)字節(jié)都是空間,得達(dá)到節(jié)省空間得目的,就得少用點(diǎn)字節(jié),現(xiàn)在表示以2-3字節(jié)每個(gè)字居多。比較多的是2個(gè)字節(jié)吧,舉個(gè)簡(jiǎn)單的例子(.)左邊括號(hào)是英文里的句號(hào)也就是點(diǎn)(。)而這個(gè)是中文的句號(hào),它不僅是外形上的變化而且細(xì)心觀察(你可以嘗試把它選中)你會(huì)發(fā)現(xiàn)這個(gè)中文的句號(hào)要比英文的寬,就是因?yàn)橹形乃嫉淖止?jié)較多(如有錯(cuò)誤評(píng)論區(qū)指正)
搞清楚這一點(diǎn),亂碼的原因就很好說(shuō)了,可能很多人還是一臉懵,那我再稍微解釋一下。
用兩個(gè)字節(jié)來(lái)存儲(chǔ)或三個(gè)字節(jié)存儲(chǔ)一個(gè)漢字,但是兩個(gè)或三個(gè)間的0和1能夠不重復(fù)的組合很多甚至比漢字還多,有些組合還沒(méi)有被定義,就比如advan是個(gè)不存在的單詞,我們無(wú)法將它翻譯。一個(gè)道理,計(jì)算機(jī)也是如此。這是導(dǎo)致亂碼的一個(gè)原因。
還有個(gè)原因,exe文件是二進(jìn)制文件,它是寫(xiě)給計(jì)算機(jī)看的而不是寫(xiě)給人看的,自然沒(méi)有遵循UTF-8等的規(guī)矩。管它UTF-8會(huì)翻譯成什么人話,它能執(zhí)行而不是既能執(zhí)行又能看得懂,有些跌跌撞撞勉強(qiáng)能被翻譯的硬是被這個(gè)解碼的翻譯成鬼話(大概長(zhǎng)這樣了PKQ??V?^?П???0???Pr??????;???)Yk$?l???& ?=~3?3???8b?EY???Uz1y?aI?:?oX??|???z??=????Y8?#6????K?K)?4???????f???g???xf??[????*?M??J????H??PK??V????r2)其實(shí)內(nèi)容還是勉強(qiáng)能看一點(diǎn)的比如說(shuō)只不過(guò)大部分被打上了問(wèn)號(hào).
順便說(shuō)下:我們復(fù)制文字等也是這樣,他復(fù)制到的不是你看到的而是一串二進(jìn)制數(shù)據(jù),所以從一個(gè)地方復(fù)制到另一個(gè)地方可能也會(huì)亂碼,舉個(gè):假設(shè)臺(tái)灣人給你發(fā)東西,但是他們那邊用的是big-5(也相當(dāng)于是字典,但是里面內(nèi)容不相同),文件到你這邊,你用的依舊是原來(lái)的方式解碼,軟件也不知道這是用big-5的解碼方式?jīng)]有改變。那你打開(kāi)就亂碼了。
文章可能會(huì)有些小錯(cuò)誤,畢竟第一次寫(xiě)文章,希望各位能夠理解謝謝
關(guān)鍵詞:

營(yíng)業(yè)執(zhí)照公示信息