改行コード

改行コードとは



改行コードとは、ワープロやコンピュータでテキストの段落を区切るために使用される制御文字です。主にキャリッジリターン(CR)とラインフィード(LF)の2種類があり、システムによって使い分けられています。これらの用語はタイプライターの動作に由来しており、CRは印字位置を先頭に戻し、LFは次の行へ送る役割を果たします。

改行コードの種類



改行コードは、システムによって異なる扱いを受けるため、データ交換の際に問題が生じることがあります。

LF(ラインフィード): UNIX系システム(Linux, macOSなど)で主に利用されます。文字コードは0x0Aです。
CR+LF: Windows系システムで利用されます。CR(0x0D)とLF(0x0A)の組み合わせです。
CR(キャリッジリターン): 古いMac OSなどで利用されていました。文字コードは0x0Dです。
その他のコード: Unicodeには、NEL(0x85)、LS(0x2028)、PS(0x2029)などの改行に関わる制御文字も存在します。また、IBMメインフレームシステムでは、NELが使用されます。

改行コードの歴史



改行コードは、タイプライターテレタイプ端末の仕組みが起源です。初期のシステムでは、プリンターヘッドを次の行の先頭に移動させるために、CRとLFを別々に送る必要がありました。このため、例えば行の途中でLFを伴わないCRを送り、そのまま文字を出力することで、文字を重ね書きするなどの操作が可能でした。

ASCIIコード策定時、ISOの草案ではCR+LFとLFの両方をサポートしていましたが、ASAの草案ではCR+LFのみがサポートされていました。MulticsオペレーティングシステムはLFを改行コードとして採用し、UNIXやそれらに続くシステムもそれに倣いました。MS-DOSやWindowsは、CP/M|CP_Mの実装を真似てCR+LFを採用しています。

プログラミングにおける改行コード



プログラミング言語は、異なるOSの改行コードを吸収するために、抽象化の仕組みを提供しています。

C言語



C言語では、
(改行)と\r(復帰)のエスケープシーケンスを提供しており、コンパイラがそれぞれの環境に適したバイト列に変換します。

ただし、I/Oライブラリでは、テキストモードでファイルを開いた場合、
が自動的にシステムの改行コードに変換されます。例えば、UNIXでは0x0A、Windowsでは0x0D 0x0Aになります。バイナリモードで開いた場合は、変換は行われません。このため、ネットワークプログラミングなどでは、注意が必要です。

Java



Javaでも、
(改行)と\r(復帰)のエスケープシーケンスが提供されており、それぞれ0x000A、0x000Dに変換されます。しかし、PrintStreamクラスのprint/printlnメソッドでは、これらの数値を特別扱いせず、環境依存の改行コードに変換しません。環境依存の改行コードを出力する場合は、printfメソッドの%nを使用する必要があります。

インターネットにおける改行コード



HTTP, SMTP, FTPなどのインターネットプロトコルでは、改行コードとしてCR+LFが推奨されていますが、実際にはLFにも対応することが求められています。これは、初期のインターネットサーバーがDEC機によって構成されていた名残です。

まとめ



改行コードは、テキストデータを扱う上で重要な要素です。異なるシステム間でデータ交換を行う際には、改行コードの違いによる不整合が発生しないように、注意する必要があります。プログラミングでは、言語やライブラリの提供する機能を使って、OSの違いを吸収したり、必要に応じてバイナリモードで直接改行コードを制御したりすることが重要になります。

関連項目



文字コード
ASCII
行 (コンピュータ)
キャリッジ・リターン

外部リンク



* Unicode.html'>The End-of-Line Story

もう一度検索

【記事の利用について】

タイトルと記事文章は、記事のあるページにリンクを張っていただければ、無料で利用できます。
※画像は、利用できませんのでご注意ください。

【リンクついて】

リンクフリーです。