改行コードの変換 UNIX(LF) Windows(CR+LF) MacOS(CR)
目次
改行コードの違い UNIX(LF) Windows(CR+LF) MacOS(CR)
プログラムを書いていると必ず出くわす問題の1つにOSによる改行コードの違いがあると思います。
OSによる改行コードは以下の通りです。
記号 | 読み方 | ASCII | マッチング | オペレーティングシステム |
CR | キャッリッジリターン (Carriage Return) |
0x0D | \r | MacOS(バージョン9まで) |
LF | ラインフィード (Line Feed) |
0x0A | \n | UNIX, Linux, AIX, Mac OS X |
CR+LF | キャリッジリターン・ラインフィード | 0x0D0A | \r\n | MS-DOS, Windows, OS/2 |
これらのOSによる改行コードの違いは、歴史的にはかなり古く、そのOSの起源というか、源流に依存しているようです。
例えば、UNIXにおいては、UNIX以前のオペレーティングシステムであるMulticsが改行コードとしてLFを採用していたことと関係があるようです。
UNIXはMulticsを元に作られています。
Windowsにおいては、MS-DOSやそれ以前のオペレーティングシステムであるCP/Mにおいて改行コードがCR+LFであったことと関係しています。
Windowsの源流はMS-DOSだし、MS-DOSはCP/Mと一部競合していた時代があったのでCP/Mを参考にしていたはずです。
ところで、プログラムを書いていると時々これらの処理系による改行コードのを意識しないといけない場面がよくあります。
これらのコードの変換方法を見てみましょう。
Windowsでの改行コードの変換 LF→CR+LF
私の場合、Windows環境での改行コードの変換は基本的にサクラエディタを使って行っています。
サクラエディタでは改行コードのCR+LF、LF、CRの相互変換がメニューから簡単に行うことが可能です。
また、文字コードのSJIS、JIS、EUC-JP、Latin 1、Unicode、UnicodeBE、UTF-8、CESU-8、UTF-7の変換も行えるほか、BOMのありなしの変換も行うことが可能です。
Windows環境では、エディタやその他便利な改行コード変換ツールがたくさんあるようです。
Linuxでの改行コードの変換 LF→CR+LF
Linuxではperlを使ってコマンドラインから改行コードの変換を行うことが可能です。
LFからCR+LFへの変換は以下の通りです。
1 |
$ perl -p -e 's/\n/\r\n/' < linux.txt > windows.txt |
CR+LFからLFへの変換は以下の通りです。
1 |
$ perl -p -e 's/\r\n/\n/' < windows.txt > linux.txt |
od -x <ファイル名>などのコマンドによって、ファイルの中身のASCIIコードを見ることが可能です。
プログラムでの改行コードの扱いなど
C言語では以下のように記述すればコンパイラが処理系に応じた改行コードに変換してくれます。
printf(“\n”);
Javaの場合は、System.out.println
C#の場合は、System.Environment.NewLine
をそれぞれ使えば処理系に応じた改行コードを使うようになります。
単純にWindowsだけの世界でプログラムを行っている人はあまり改行コードを意識することはないようです。
ただ、サーバー系のプログラムだったり、WindowsとLinuxの両方を扱うようなプログラムでは改行コードの違いは注意が必要です。
ところで最近はスマホのアプリを描く人も多いと思いますが、さて、AndroidやiPhoneでの改行コードはどうなっているのでしょうか?
AndroidはもろにLinuxカーネルのカスタマイズだし、iOSもUNIXを源流に持つOSなのでどちらも改行コードはLFなのでしょうか。
時間ができた時に調べてみます。
または誰か教えてください。