はじめに
株式会社LITALICOの@iwafsです。
業務で改行コードの処理を行うことが度々あるのですが、
毎度検索している気がするのでこの機会に改行コード・改行文字についてまとめてみました。
結論
改行コードまたは改行文字とは、コンピュータ上で改行を表す制御文字のことです。
全部で3種類あり、OSによってコードが異なります。
コード | 正称 | 意味 | OS | エスケープ シーケンス |
ASCII |
---|---|---|---|---|---|
CRLF | Carriage Return Line Feed |
行頭復帰かつ改行 | Windows | \r\n | 0x0A 0x0D |
CR | Carriage Return | 行頭復帰 | macOS 9以前 | \r | 0x0A |
LF | Line Feed | 改行 |
Unix系, macOS X以降, iOS, Android |
\n | 0x0D |
改行コードの由来
改行コードのCR(Carriage Return:キャリッジリターン)やLF(Line Feed:ラインフィード)はタイプライターの改行動作が由来です。
タイプライターを使用して文章を書く際は、この2つの動作で改行を行っていました。
- CR:ロール紙を挟み込むキャリッジを行の先頭へ戻す
- LF:ロール紙を回して1行送る
OSによって改行コードが異なる理由
諸説あるそうですがOSの成り立ちや設計哲学が異なるため改行コードも異なり、
そのまま慣習的に別々の改行コードを採用しているようです。
ちなみにmacOSのバージョンによって改行コードが異なるのは、
macOS 9からmacOS Xへバージョンアップする際にUnixベースのOSへ移行したからです。
改行コードの差異による問題
異なるOS間でファイルのやりとりを行うと、改行コードの違いによって改行が無視されたりコンパイルエラーが発生することがあります。
この場合、各種エディタやターミナルから改行コードの変換を行うことができます。
改行コードがCRの場合の変換方法は、macOS 9以前しか使われていないため省略します。
Visual Studio Codeで変換する場合
ターミナルで変換する場合
- 以下コマンドを実行して現在の改行コードを確認します
$ file hoge.txt
- 改行コードがCRLFまたはCRの場合はその旨が表示され、LFの場合は何も表示されません
hoge.txt: Unicode text, UTF-8 text, with CRLF line terminators # CRLF hoge.txt: Unicode text, UTF-8 text, with CR line terminators # CR hoge.txt: Unicode text, UTF-8 text # LF
- dos2unixコマンドをインストールします
brew install dos2unix
- 以下コマンドを実行して改行コードを変換します(
unix2dos
はdos2unix
パッケージに含まれています)# CRLF -> LF $ dos2unix hoge.txt # LF -> CRLF $ unix2dos hoge.txt
- 変換後の改行コードを確認します
$ file hoge.txt
おわりに
普段意識することが少ない改行コードですが、異なるOS間でのファイルのやりとりを行う際には、その違いによって問題が生じることがあります。
改行コードの違いを理解して、適切にファイル管理していきましょう!