為什麼 Windows 換行符號比 Unix 換行符號大?

為什麼 Windows 換行符號比 Unix 換行符號大?

所以我創建了兩個文件,每個文件有 127,955 行,每行有 24 個隨機字元。就文字而言,這兩個文件完全相同。然而,一個檔案有 Unix 換行符,另一個檔案有 Windows 換行符。帶有 Unix 換行符的檔案為 3,124 KB,帶有 Windows 換行符的檔案為 3,249 KB。這些文件之間沒有其他差異,因此我不得不假設由於某種原因 Windows 換行符號佔用了更多空間。知道為什麼嗎?

答案1

如果您在十六進位編輯器中開啟文字文件,您將在行尾看到的差異如下:

Windows 行結尾:0x0D 0x0A

Unix 行結尾:0x0A

0x0D回車符的十六進位值(在文字中簡單表示為\r)。

0x0A新行字元的十六進位值(在文字中簡單表示為\n)。

當行結尾採用 Windows EOL 格式時,行將以 2 個字元結尾:\r\n;而 Unix EOL 格式以 1 個字元結尾:\n.

因此,127,955 * (24 + 1) == 3,198,875 bytes (3,123.9 KB)對於 Unix EOL 和127,955 * (24 + 2) == 3,326,830 bytes (3,248.86 KB)Windows EOL。

希望有幫助。

答案2

至於實際的“為什麼”位 - 歷史上,電傳打字機使用回車符(十六進制 0D)將打印頭移動到左邊距,然後使用換行符(十六進制 0A)來推進紙張。

Commodore、Atari 和(Unix 之前的)Apple 保留回車符號作為行結束符號; Unix 保留了換行符; CP/M/DOS 保留了兩者。

許多網際網路通訊協定(例如 HTTP)仍然是根據兩者(又稱「CRLF」)來定義的,但在實際的文字檔案中,我遇到的 Windows 上唯一不能正確處理「只是」一行的程式Feed 是記事本。

從技術上講,“換行符”一詞的存在只是為了掩蓋這種歷史差異。例如,在C 中,「\n」或在Lisp 中,#\Newline 會對應到本機系統碰巧喜歡的任何表示法,與「\r」或#\Return 相比,當專門需要一個特定的位元組字符時。

答案3

Windows 使用回車符後跟換行符號。 Unix 僅使用換行符號。所以每個換行符都會多一個位元組。

相關內容