改行コードはなぜ 3 種類もあるのか
タイプライタ時代の名残で、行送りには「復帰(CR = 0D)」と「改行(LF = 0A)」の 2 動作がありました。 Unix は LF だけ、旧 Mac は CR だけ、Windows は両方(CRLF)を採用し、そのまま今に残っています。 テキストとしての中身は同じでも、行末のバイトが違うと別のファイル(別ハッシュ)になり、 行数の数え方やパーサの挙動が変わります。
混在ファイルは特に厄介で、行数の数え方がツールごとに割れます。 Git の警告(LF will be replaced by CRLF)や、 diff が全行変更に見える事故も、たいてい改行コードの取り違えが原因です。 手元のテキストを揃えたいときは 改行コード変換ツールで CRLF ⇄ LF ⇄ CR を一括変換できます。
よくある質問
LF・CRLF・CRの改行コード別テストファイルはどこで無料ダウンロードできますか?
このページから、LF(Unix/macOS)・CRLF(Windows)・CR(Mac Classic)・混在の4種を無料でダウンロードできます。中身はどれも同じ4行で、行末のバイトだけが違います。会員登録は不要です。
CRLFとLFの違いは何ですか?
LFは改行1バイト(0A)、CRLFは復帰+改行の2バイト(0D 0A)です。Unix・Linux・現在のmacOSはLF、Windowsは CRLF を標準にしています。CRLFのファイルをUnixツールに渡すと行末に ^M(CR)が残ることがあります。
混在した改行コードは何が問題ですか?
1つのファイル内で行ごとに改行コードが違うと、行数の数え方がツールごとに割れます。Gitの警告やdiffが全行変更に見える事故も、たいてい改行コードの取り違えが原因です。