hexでの改行文字 — LF、CR、CRLF

16進数での改行表現を理解: LF(0A)、CR(0D)、CRLF(0D 0A)。Windows、Unix、クラシックMacシステム間の改行問題をデバッグします。

Common Values

Hex

0D 0A

ASCII

\r\n (CRLF)

詳細な説明

改行はオペレーティングシステム間で異なる表現をされ、この違いはバグの持続的な原因です。16進数では、3つの標準改行規則は: LF0A)、CR0D)、CRLF0D 0A)です。これらのhex値を理解することは、テキストファイルの問題のデバッグ、ネットワークプロトコルの解析、クロスプラットフォーム互換性の確保に不可欠です。

3つの改行スタイル:

スタイル Hex エスケープ 使用元
LF(ラインフィード) 0A \n Unix、Linux、macOS(OS X以降)、現代の標準
CR(キャリッジリターン) 0D \r クラシックMac OS(OS X以前、現在ほとんど見られない)
CRLF 0D 0A \r\n Windows、HTTP、SMTP、FTP、ほとんどのインターネットプロトコル

CRとLFの起源:

これらの文字は機械式テレタイプに由来します。キャリッジリターン(CR、0D)は物理的に印字ヘッドを行の先頭に戻しました。ラインフィード(LF、0A)は用紙を1行進めました。両方の操作を実行することで(CRの後にLF)新しい行が始まり、これがWindowsとネットワークプロトコルが2文字シーケンスを使用する理由です。

hexダンプでの改行の発見:

テキストファイルをhexエディタで開くと、改行は即座に可視化されます:

  • Unixファイル: ...48 65 6C 6C 6F 0A 57 6F 72 6C 64...("Hello\nWorld")
  • Windowsファイル: ...48 65 6C 6C 6F 0D 0A 57 6F 72 6C 64...("Hello\r\nWorld")
  • 混在改行: 0A0D 0Aの両方のパターンが出現(問題の兆候)

改行によって引き起こされる一般的な問題:

  • Gitのdiffがファイル全体が変更されたと表示 — 改行変換が原因であることが多い
  • Linuxでシェルスクリプトが失敗 — Windowsで編集されたスクリプトは\r\n改行を持ち、シェルが\rをコマンドの一部として解釈する
  • CSV解析エラー — 一部のパーサーは一方のスタイルを期待するが他方を受け取る
  • HTTPプロトコル違反 — HTTPヘッダーはRFC仕様に従い\r\nで終わる必要がある

ネットワークプロトコルとCRLF:

HTTP、SMTP、FTP、ほとんどのインターネットプロトコルは行セパレータとしてCRLF(0D 0A)を義務付けています。HTTPレスポンスヘッダーブロックはダブルCRLF(0D 0A 0D 0A)で終わります。これはヘッダーとボディを分離する\r\n\r\nシーケンスです。ネットワークキャプチャをhexで分析する際、この4バイトパターンを探してヘッダー/ボディの境界を見つけます。

ユースケース

開発者は、クロスプラットフォームのテキストファイル問題のデバッグ、Windows編集後のシェルスクリプト障害の調査、ネットワークキャプチャでのHTTPトラフィックの解析時にhexレベルの改行分析を使用します。

試してみる — Hex Editor

フルツールを開く