看似簡單的換行,背後藏著打字機時代的遺產與作業系統的博弈。本文從 ASCII 碼、硬體演進、OS 差異三個維度,徹底講透 \\r (CR) 與 \\n (LF) 的恩怨情仇,並給出 Java/C++ 跨平台編碼的黃金法則。
| CR (\r) | LF (\n) | |
|---|---|---|
| 全稱 | Carriage Return | Line Feed / New Line |
| ASCII | 13 (0x0D) | 10 (0x0A) |
| 動作 | 光標歸行首 | 光標下移一行 |
\\n 即表示換行。\\r\\n 兩字符組合,順序不可逆。\\r 表示換行。\\r\\n 兩字符。\\n,C 語言標準庫在輸出時自動轉換為當前平台約定。\\n,運行時由標準庫根據平台自動轉換(Windows 下輸出 \\r\\n)。\\r\\n 作為行分隔符,需手動拼接。BufferedReader.readLine() 或 Files.readAllLines() 自動處理跨平台換行,避免手工切分。掌握這段歷史,下次遇到 Git 提示 CRLF will be replaced by LF 或跨平台文件亂碼,就能從容應對。