Skip to main content

兩種檔案大不同

· 7 min read
戈頓
Developer & Co-founder of Tecky Academy

當你想寫好一個文件,用 .doc 檔.txt檔 有何分別? 驟看之下,最大分別就是 .doc檔 要用Microsoft Word開, .txt檔 只要一個簡單Notepad就可以。實情是 .doc檔 跟 .txt檔 分別代表兩種截然不同的檔案,如果你用一個純文字編輯 器打開他們,分別就顯而易見了。

Binary vs Plaintext

右邊是.doc檔 只有一句 I am a word file ,卻顯示了許多紅色的怪符號,左邊的.txt檔只顯示了一句簡單的文字,為何同樣是顯示一句文字,有 如此大的分別? 原因是

.doc 檔是一個二進位檔案(binary file) ,而 .txt檔是一個純文字檔案(plain-text file)

這就奇怪了,對電腦而言,不是所有文字都是二進位嗎?實情沒有那麼簡單。

純文字檔

純文字檔,通常是跟編程(programming)、組態(configuration)有關,之所以是純文字,正是因為要方便人閱讀及更改,編程中常出現的 .html檔、.js檔,都是方便工程師隨時閱讀,亦方便以不同的純文字編輯器開啟,無須如.doc檔一樣必須由一類軟件開啟。

純文字檔旳原理是將文字以編碼例如UTF-8表示,在以前文章中所提到的Emoji亦是以UTF-8表示,由於UTF-8本身各處通用,能放諸四海皆準,因此使 用不同的文字編輯器亦能正常開啟。由於純文字檔方便分享,很多開源軟件亦會盡量多用純文字檔,以方便在Git 一類的版本控制軟件中使用。

二進位檔

二進位檔,則跟平時常用的軟件有很大關係,如上文提到的 .doc、excel病中的主角 .excel 、最常用的 .ppt ,你用純文字編輯器打開 的話,都是一大堆二進位檔。平面設計師常用的 .psd.ai 等等,都是二進位制。二進位檔要用專用的編碼讀取,例如.doc 的編碼,在微軟 的網站上,有一份長達五百多頁的完整文件,解釋到底 .doc 的二進位編碼是如何讀取。

比較

既然純文字檔有容易分享、讀取、寫入的特性,為何二進位檔依然大行其道?一個檔案之所以是二進位,大多是因為以下三個原因:

  1. 所儲存數據本身是二進位模式,例如儲存圖片,點陣圖(Bitmap graphic)又名柵格圖(Raster graphic),以RGB碼來代表每一個像素的顏色,例如 (60,101,168),代表的是一個類近於海軍藍的顏色。因此,要儲存一幅圖,就是儲存了幾百萬個像素,每一個像素都是一個小於255的數字,最適合的自然是用二進位儲存。在 .psd , .ai 的情況,都是基於這個原因。
  2. 所儲存的數據需要壓縮以縮小檔案大小,微軟新格式的.docx檔其實是一個特殊的壓縮檔,將其中所有內容(包括巨集,加在文件中的圖片),通通加到該壓縮檔中,因此可以減少佔用空間。 .docx、.pptx、xlsx的二進位制式都是因為這個原因。Mac的 .numbers 檔都是基於同一個原理。
  3. 該檔案是執行檔,因為電腦中央處理器只能讀取二進位碼,因此任何執行檔,例如Windows的exe檔,都是二進位的。

通常有足夠大小的二進位檔的大小都比純文字檔要小,舉一簡單例子,要表達數字65535,在純文字檔案,須要五個子元(character),以每個字元要一個位元組(byte) 來表達,起碼要五個位元組。但要如果用數字表達65535,只需要兩個位元組。儲存效率上差了足足一倍。亦是因此通常圖案很難再壓縮,因為儲存效率已相 當高。

常用二進位檔案的替代

讀到這裏,你可能會想,既然有不少軟件都支援二進位檔,如果我不是以編程為生,就不須要寫純文字檔了。恰恰相反,有 些純文字的做法卻是可以改善工作效率的利器。

以.doc為例,大家自用電腦以來都已經使用多年,其實在.doc以外,還有許多純文字的格式化文本(formatted Text)任君選擇。 例如 RTF 檔、Markdown檔等,都方便大家書寫,加上不同格式。 我尤其推薦Markdown檔,大家平常見到我的文章,大多都是先在Markdown檔寫好,再發佈的。

Markdown檔的參考文件 https://commonmark.org/help/

Rich Text Format的參考文件 https://www.microsoft.com/en-us/download/details.aspx?id=10725