兩種檔案大不同: .txt vs .doc

IT小狗

36 回覆
9 Like 59 Dislike
IT小狗 2018-12-14 17:19:31
原文出處: https://www.tecky.io/blog/兩種檔案大不同



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



右邊是.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 的編碼,在微軟 的網站上,有一份長達五百多頁的完整文件 ([url]https://interoperability.blob.core.windows.net/files/MS-DOC/[MS-DOC].pdf[/url]) ,解釋到底 .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


__________________________________________________________

文章出處簡介:

Tecky Academy
參照美國矽谷模式,由本地人創辦的香港微學位 coding bootcamp,有意入行的巴絲們,可於三個月內由零成為專業的開發者,一次過學會 Git/Gitlab, HTML, CSS, JavaScript, TypeScript, Node.js, Express, Jest, Socket.io, PostgreSQL, AWS EC2/S3/Cloudfront/Route 53, Gitlab CI, React, Redux, Tensorflow 等等⋯⋯ 絕對唔係 STEM,唔係求其教下網站,全部打真章!

高抬各巴絲貴手 like/follow 我地嘅 Facebook: http://bit.ly/2BPcSmB
有咩問題可以 tg 小弟: https://t.me/itdogltd
咕狗 2018-12-14 17:23:27
呢次亂UP到直情錯喎
小智心滿意竹 2018-12-14 17:47:50
手一黏便緊(UTC+9 2018-12-14 17:50:02
純文字檔唔比用其他encoding 唔比用UTF16 UTF32 BIG5
手一黏便緊(UTC+9 2018-12-14 17:51:44
Shell script唔係可執行檔
IT小狗 2018-12-14 18:23:19
今次可能寫得太實 的確可以用任何 encoding 表示
IT小狗 2018-12-14 18:25:21
Shell Script 某程度上唔係獨立可執行嘅檔案

1)執行得到係因為個 file association set 去左用 shell 黎行
2)或者喺 unix 入邊用 shebang set 好用咩 executor 黎執行呢個文字檔
IT小狗 2018-12-14 18:25:33
歡迎指正
手一黏便緊(UTC+9 2018-12-14 18:32:29
用你個定義 大家平時接觸開既都唔係獨立可執行檔案
1. 執行到係因為個os提供左API
2. 執行到係因為個os提供左loader
IT小狗 2018-12-14 18:36:11
如果跟返 Executable 呢個定義 https://en.wikipedia.org/wiki/Executable ,所謂 Executable 就係用 OS 提供嘅 API/Loader 去執行嘅 file

喺主流嘅 OS 當中,Executable 都係 binary format 黎
咕狗 2018-12-14 19:06:36
1)用binary同text-base比較.txt ("text/plain") 同.doc("application/msword")已經唔多好, 因為"text/plain" 連Rich Text都不是. 我明白你想掃盲, 但你又話binary file size 細D,但你打幾隻字落.txt同.doc睇下個size?

2) 純文字檔旳原理是將文字以UTF-8表示 <= 錯到9彩. 點read一個text file係由個reader決定. text/plain唔一定係text/plain;charset=uft-8. Windows default應該係當一個tex file ASCII encoding(or window's default encoding, not really remember), 除非有 Byte Order Marks (https://docs.microsoft.com/en-us/windows/desktop/intl/using-byte-order-marks). 但如果你用LINUX vim之類開,而有BOM就會見到file頭亂碼.
(BTW, Plain Text file頭有BOM(binary flag)仲係咪plain text file? )
(BTW2, 見過gb encoding .java file )

3) docx係2007開始,10年+啦都. 你仲同你講返doc . 真係比IT狗+普通人睇的話,講下doc同docx個history,叫人咪撚再用doc啦.
手一黏便緊(UTC+9 2018-12-14 19:07:20
Single UNIX Specification, Version 2, Glossary, Executable file
A regular file acceptable as a new process image file by the equivalent of the exec family of functions, and thus usable as one form of a utility. ...

Single UNIX Specification, Version 2, System Interface & Headers Issue 5, exec
If the process image file is not a valid executable object, execlp() and execvp() use the contents of that file as standard input to a command interpreter conforming to system(). ...

exec話process image file可以唔係一個object file 而係個裝左堆command既text file
然後Executable file既定義係acceptable as a new process image file by exec family
IT小狗 2018-12-14 19:13:13
1, 3 都係俾普通人睇所以無辦法太過詳盡
感謝巴打嘅意見,下次我地會寫下 doc 同 docx 嘅 history

2 呢點的確寫得太實,我地會喺原文修改返
手一黏便緊(UTC+9 2018-12-14 19:13:17
IT小狗 2018-12-14 19:17:02
感謝巴打指正
BackTrack 2018-12-15 05:07:45
真係好睇你plain text or binary個定義係點樣

個人睇法會當所有嘢都係binary object
直接將個file print出去stdout睇就最清楚(或者用vim嗰類stream processor, 一樣)

有所謂"format"嘅file一定會有header, magic number(舉例*.doc, magic number會係D0 CF 11 E0 A1 B1 1A E1,) , or metadata for os associate 翻MIME type 做management
LIHKGMr.A 2018-12-15 09:23:36
doc 其實有 xml 格式
RX-78-2 2018-12-15 09:39:13
iostream 用fopen配合返decoder就解到對應binary

ms office 一早開左源,Google 同libre先唔會再走位

另外教人寫markdown/latex啦,MS word 做簡單文書就得,大型文書跟本唔掂
紅帽IT狗 2018-12-15 09:53:57
圖案難壓縮 huffman coding? DCT? Autoencoder?
Natural image 咁多redundancy咁多pattern竟然係難壓縮?
難唔難壓縮好似係用entropy 嚟計架喎,唔係d data排得密密麻麻就難壓縮喎
潮童光 2018-12-15 10:01:11
諗起以前中學學 IT
勿通膠類 2018-12-15 10:05:26
嘩,寫個個係咪叫『拿破輪』
月巴糸糸糸田女未 2018-12-15 13:14:04
嗰個係docx
雖然樓豬2018年都仲討論doc唔講docx係on99
LIHKGMr.A 2018-12-15 13:28:53
docx 係 ooxml 本身就係一堆 xml zip 左佢地
我講既係 doc 有 xml 格式可以另存,係 microsoft officr xml format 之一,個時未有 ooxml
VicF 2018-12-15 15:28:01
txt file可以唔係UTF-8吧 我download嘅字幕唔知幾多係gbk嘅,出亂碼,經常要用

iconv -f gbk -t utf-8 < gbk.srt > utf8.gbk

改番先睇到
LIHKGMr.A 2018-12-15 15:41:29
點會唔得
linux vim save 時就係 UTF-8
吹水台自選台熱 門最 新手機台時事台政事台World體育台娛樂台動漫台Apps台遊戲台影視台講故台健康台感情台家庭台潮流台美容台上班台財經台房屋台飲食台旅遊台學術台校園台汽車台音樂台創意台硬件台電器台攝影台玩具台寵物台軟件台活動台電訊台直播台站務台黑 洞