首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

換行符 \r 與 \n 完整指南:歷史溯源、跨平台差異與編碼最佳實踐

     編輯:Java 相關知識

看似簡單的換行,背後藏著打字機時代的遺產與作業系統的博弈。本文從 ASCII 碼、硬體演進、OS 差異三個維度,徹底講透 \\r (CR) 與 \\n (LF) 的恩怨情仇,並給出 Java/C++ 跨平台編碼的黃金法則。

字符本質對照

CR (\r)LF (\n)
全稱Carriage ReturnLine Feed / New Line
ASCII13 (0x0D)10 (0x0A)
動作光標歸行首光標下移一行

作業系統換行約定

  • Unix/Linux/macOS 現代版: 單獨 \\n 即表示換行。
  • Windows/DOS: 必須 \\r\\n 兩字符組合,順序不可逆。
  • Mac OS 9 及之前: 單獨 \\r 表示換行。

歷史根源:從機械打字機到電傳打字機

  1. 機械打字機:按 Enter 鍵觸發「歸位」+「滾筒上卷」兩動作,合稱「回車」。
  2. Teletype Model 33:打印頭歸位需 0.2 秒(相當 2 字符時間),為防止丟字,協議規定每行結尾補發 \\r\\n 兩字符。
  3. Unix 簡化為單一 \\n,C 語言標準庫在輸出時自動轉換為當前平台約定。

程式語言中的最佳實踐

  • Java / C / C++ / Python 3: 代碼中統一使用 \\n,運行時由標準庫根據平台自動轉換(Windows 下輸出 \\r\\n)。
  • 網絡協議 (HTTP/SMTP):** 嚴格要求 \\r\\n 作為行分隔符,需手動拼接。
  • 文件讀寫: 使用 BufferedReader.readLine() 或 Files.readAllLines() 自動處理跨平台換行,避免手工切分。

掌握這段歷史,下次遇到 Git 提示 CRLF will be replaced by LF 或跨平台文件亂碼,就能從容應對。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved