我們知道一般情況下文件內容越多,文件體積就會越大,佔用的磁碟空間也會越大;具體到Windows的文本文檔也就是TXT文檔來看就是文件字數越多文件體積就越大。我很好奇,是不是可以根據文件大小算出文件里的字數或者根據字數算出文件大小?帶著這個疑問我做了一個小實驗,建了幾個不同編碼格式的文本文檔並觀察他們的大小。

結果證明TXT文件的字數和文件大小是能夠簡單互相計算的。

驗證過程

新建不同編碼格式的文本文檔,並觀察文件大小和佔用空間。

載入超時,點擊重試

不同編碼的文本文檔

空文本文檔文件大小

10000個英文字母文本文檔大小

10000個漢字文本文檔大小

空文件里沒有寫任何字元,英文字母文件里寫了10000個字母,中文漢字文件里寫了10000個漢字,從結果可以看出,各種編碼的文本文檔本身就佔了不同的空間來標識編碼格式。由於文件是以二進位形式存儲的,以二進位查看文件,空文件里的內容如下(顯示為十六進位):

ANSI編碼格式的文本文檔文件頭

unicode編碼格式的文本文檔文件頭

unicode big endian編碼格式的文本文檔文件頭

utf8編碼格式的文本文檔文件頭

可見不同編碼格式的文本文檔,標識位所佔的位元組數是不一樣的。

  • 文件大小 / 佔用空間,單位byte
  • 由於電腦磁碟4k對齊,佔用空間總是4096的整倍數
  • 不同編碼的文本,是根據文本的前兩個位元組來定義其編碼格式的

下表是不同編碼的編碼標識位長度和中英文字元所佔位元組

結論

從表格可以看出:

TXT文件大小 = 編碼標誌位長度 + 中文字元數 * 單個中文字所佔位元組數 + 英文字元數 * 單個英文字母所佔位元組數
TXT文件佔用空間 = 向上取整(TXT文件大小 / 4096) * 4096

  • 單位為位元組
  • 【 中文字元數】指包括漢字、中文標點、全形符號在內的所有字元總數
  • 【英文字元數】指包括英文字母、英文標點、半形符號在內的所有字元總數
  • 其他語言字元這裡未作深究
  • 【4096】即4K,4K對齊是默認的磁碟扇區對齊規則,如果磁碟未4K對齊則不適用

於是我們就可以根據文件字數算出文件大小,或者根據文件大小算出文件字數。

在實際生活中我們的文本文檔基本上是中英文兼具,還包括各種符號,所以對ANSI和utf8編碼格式的文檔只能算出大致的數據,要算出精確的數據還需要對字元進行分類;對unicode和unicode big endian編碼格式的文檔能算出準確數據。

可能沒有什麼實際的用處,只是一時好奇就留意了一下。


推薦閱讀:
查看原文 >>
相关文章