表紙 / 自作ソフト / 日記 / 宝箱 / サイト情報 / 検索
一般 / 新C言語 / 駄文
一覧 / 本文

改行コード Memo

Last update: 2006/05/03

(c)1999-2003,2006 seclan. All rights reserved.
Homepage: http://seclan.dll.jp/
E-mail: seclan[ここはアトマークに置き換えてください]dll.jp


改行コードの種類

コード HEX C言語採用されているOS/ソフト
CR LF 0d 0a \r\nWindows / DOS
LF 0a \nUnix / Macintosh OS X 以降
CR 0d \rMacintosh OS 9 以前
LF CR 0a 0d \n\r昔の一部のソフト(存在していたらしい)
NL -- --(論理的)改行
 *改行コードを特定の方式に決め付けないようにするためプログラミング言語の仕様書などで使用されることがある
NEL 85 \x85ISO6429
LS U+2028 \u2028Unicode
PS U+2029 \u2029Unicode
注記:
CRCarriage Returnキャリッジを戻すタイプライターのキャリッジを左端に戻す。転じて、現在の入力位置を行頭(左端)に戻す。
LFLine Feed行送り入力位置を一行進める。
NLNew Line新しい行具体的な改行コードではなく、論理的な改行を示すために用いられることが多い。
NELNExt Line次の行ISO6429 C1 コントロールに定義
LSLine Separator行分割Unicode で定義
PSParagraph Separator段落分割Unicode で定義

解説

改行コードが二文字から構成されている理由

 改行が CR LF (CRLF) や LF CR (LFCR) のような二文字から構成されている形式の理解にはシリアルプリンタの制御を考えるとよい。シリアルプリンタとは、一文字印字できるヘッドを主に行の左から右に動かして印字していく方式であり、一行を印字するごとに用紙を次の行に進める(行送り)することでページ全体を印字していく。個人向けに発売されているインクジェットプリンタや熱転写方式 / ドットインパクト方式のプリンタなどがこれに該当することが多い。
 このヘッドを行の左端 (行頭) に戻すためのコードとして利用されるのが CR であり、また行を送るために使用されるのが LF である。つまり、CR LF と連続して送信することで、一行を印字して右端に行ってしまったヘッドを左端に戻して、さらに次の行を印字するための用紙送りをするのである。
 しかし、それならば、LF CR の順番でも結果的に同じになるのではと思うだろう。LF で用紙を送り、そして CR でヘッドを行頭に戻すので、結果的には CR LF と同じになるはずである。しかし、その方法では問題が発生することがあった。それは、LF に比べると CR の方が動作が遅いという物理的な制約があったからである。先に LF をすると、CR が完了しないうちに印字が開始されてしまうことがあったのである。

改行コードが一文字で表現されている理由

 改行が LF や CR 単独で構成されている形式の理解にはラインプリンタの制御を考えるとよい。ラインプリンタとは、一度に一行ずつ印字していく方式である。シリアルプリンタではヘッドを左右に動かすことで行を印字していたが、ラインプリンタでは行を一度に印刷するため、行中の各桁(文字)に相当する部分すべてにヘッドがあるような機構を持っている。シリアルプリンタに比べ行単位で印字する分速度が速いこともあり、汎用機などで用いられることが多かった。
 このようなプリンタの場合には、印字する単位は行であるので、どこで行が終わればよいのかがわかればよい。したがって、それを表す文字はたかだか一文字で十分である。


更新履歴:
 2003/11/19: slashdot.jp で匿名の臆病者さんに指摘されたので解説部分の改定とついでに加筆を行った。
 2002/02/24: 宝箱用の初版

表紙 - 著作権 - 注意事項 - リンクについて - 404 エラーについて
(c)1999-2003,2006 seclan. All rights reserved.