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

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