改行コードの変換 UNIX(LF) Windows(CR+LF) MacOS(CR)

シェアする

  • このエントリーをはてなブックマークに追加

改行コードってOSによって違うんですね。ちょっとまとめてみました。

 

スポンサードリンク

改行コードの違い UNIX(LF) Windows(CR+LF) MacOS(CR)

text

プログラムを書いていると必ず出くわす問題の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環境での改行コードの変換は基本的にサクラエディタを使って行っています。
image

サクラエディタでは改行コードのCR+LF、LF、CRの相互変換がメニューから簡単に行うことが可能です。

また、文字コードのSJIS、JIS、EUC-JP、Latin 1、Unicode、UnicodeBE、UTF-8、CESU-8、UTF-7の変換も行えるほか、BOMのありなしの変換も行うことが可能です。

BOMについては以下をご覧ください。

text
今回はBOM(バイトオーダーマーク,byteordermark,ボム)の話です。BOM(バイトオーダーマーク,byteordermark,ボム)って何?BOMと...

 

Windows環境では、エディタやその他便利な改行コード変換ツールがたくさんあるようです。

 

スポンサードリンク

Linuxでの改行コードの変換 LF→CR+LF

Linuxではperlを使ってコマンドラインから改行コードの変換を行うことが可能です。

リダイレクトを使っています。

bash
標準ストリーム(StandardStreams)標準ストリームとは、UnixやWindowsのコマンドプロンプトにおいて、プログラムとその実行環境において事前に...

 

LFからCR+LFへの変換は以下の通りです。

 

CR+LFからLFへの変換は以下の通りです。

 

od -x <ファイル名> などのコマンドによって、ファイルの中身のASCIIコードを見ることが可能です。

 

CR+LFのシェルスクリプトをLinuxで実行する

中身がこんなファイルwindows.shの改行コードをCR+LFで作ったとします。

 

このファイルをLinuxで実行すると以下のようになります。

 

$ sh windows.sh
windows.sh: 行 2: $'\r': コマンドが見つかりません

 

シェルスクリプトの改行コードは、必ずLFにする必要があります。

 

逆に、「LFのバッチファイルをWindowsで実行する」と実行できるようです。

 

プログラムでの改行コードの扱いなど

プログラムでは以下のように記述すればコンパイラが処理系に応じた改行コードに変換してくれます。

C言語の場合は、printf(“\n”);

Javaの場合は、System.out.println

C#の場合は、System.Environment.NewLine

をそれぞれ使えば処理系に応じた改行コードを使うようになります。

単純にWindowsだけの世界でプログラムを行っている人はあまり改行コードを意識することはないようです。

ただ、サーバー系のプログラムだったり、WindowsとLinuxの両方を扱うようなプログラムでは改行コードの違いは注意が必要です。

 

ところで、最近はスマホのアプリを描く人も多いと思いますが、さて、AndroidやiPhoneでの改行コードはどうなっているのでしょうか?

AndroidはもろにLinuxカーネルのカスタマイズだし、iOSもUNIXを源流に持つOSなのでどちらも改行コードはLFなのでしょうか。
時間ができた時に調べてみます。

または誰か教えてください。

 

シェアする

  • このエントリーをはてなブックマークに追加

フォローする

コメント

  1. 匿名 より:

    JavaではSystem.out.println()以外にもシステムプロパティを使うという手があり、よく使われています。

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です