CR LF、LF、CRの改行タイプの違いは?


759

CR LF(Windows)、LF(Unix)、CR(Macintosh)の改行タイプの違いを(可能な場合は例を挙げて)知りたい。


9
非常に似ていますが、完全に重複しているわけではありません。 \n通常は改行で表されますが、必ずしも改行である必要はありません。
Adrian McCarthy、

92
CRとLFはASCIIおよびUnicodeの制御文字で\rあり\n、特定のプログラミング言語で使用される抽象化です。この質問を閉じると、質問間の根本的な違いがわかりにくくなり、誤った情報が残ります。
エイドリアン・マッカーシー

5
@AdrianMcCarthy近い投票がある意味で回答として機能する方法に問題があります。2つが同じであると主張する回答は、反対票が投じられて非常に間違っているとグレー表示される可能性がありますが、非常に間違った成約を行うには、賛成票が4つ(賛成票に相当)しかかかりません。それが起こった。
Jon Hanna

この質問の定式化は確かに優れていますが、それでもすべての実際的な目的のために同じ質問です。
Jukka K.Korpela 14年

6
@ JukkaK.Korpela:いいえ、実際はそうではありません。 \nすべてのプログラミング言語で同じことを意味するわけではありません。
エイドリアン・マッカーシー

回答:


349

実際には、どのバイトがファイルに格納されているかについてです。CRキャリッジリターン(タイプライターの時代)のバイトコードであり、LF同様にラインフィードのバイトコードです。行末マーカーとして配置されるバイトを参照するだけです。

いつものように、ウィキペディアでもっと多くの情報を。


53
私はそれはそれは言及するのも便利だと思いCRエスケープ文字\rLFエスケープ文字です\n。さらに、Wikipedia:Newline
Robert Vunabandi

1
単純な言葉でCR and LFは、このリンクによると、行の終わりと新しい行だけですが、これは正しいですか?
shaijut

@shaijut CRはキャリッジリターンの略です。それがタイプライターで運送を返したものです。だから、ほとんど正しい。
AliFurkan

763

CRとLFは制御文字であり、それぞれコード化され0x0Dています0x0A(10進数13)と(10進数10)。

テキストファイルの改行をマークするために使用されます。ご指摘のとおり、WindowsはCR LFシーケンスの2文字を使用します。UnixはLFのみを使用し、古いMacOS(OSX以前のMacIntosh)はCRを使用していました。

外典的な歴史的展望:

Peterが示したように、CR = キャリッジリターンとLF = ラインフィードの 2つの式は、古いタイプライター/ TTYにルーツがあります。LFは紙を上に移動し(ただし、水平位置は同じまま)、CRは「キャリッジ」を元に戻し、次に入力した文字が紙の左端(同じ行上)になるようにしました。CR + LFは両方を実行していました。つまり、新しい行を入力する準備をしています。時間の経過とともにコードの物理的セマンティクスが適用できなくなり、メモリとフロッピーディスクの容量が限られているため、一部のOS設計者は1つの文字のみを使用することを決定しましたが、お互いにうまく通信できませんでした。 -)

最近のほとんどのテキストエディタとテキスト指向のアプリケーションは、ファイルの行末の規則を自動的に検出し、それに応じて表示できるオプション/設定などを提供しています。


11
したがって、実際にはこれらの文字を適切に使用する唯一のOSであるキャリッジリターンとそれに続くラインフィードがWindowsです。
Rolf

4
では、Windowsで作成されたテキストファイルは3つのうち最も互換性が高い、つまり3つのOSサブセットすべてで表示される可能性が最も高いと言えますか。
プロメテウス

3
@Hashimそれは正しく表示されるかもしれませんが、キャリッジリターンでテキストシェルスクリプトを実行しようとすると、通常はエラーになります
Omer

単純な言葉でCR and LFは、このリンクによると、行の終わりと新しい行だけですが、これは正しいですか?
shaijut

CR+LF他のシステムでは、一部のWindowsスタイルファイル()が二重改行で表示されることがあります。おそらく、テキストを表示するエディターは、復帰改行と改行の両方を改行区切り文字としてサポートしているため、1が意図されていた場所に2行が作成される場合があります。一方、そうCR+LFかもしれない最も互換性のある、私はそれが問題なくはないと思います。
Magnus Bull

459

これは私が見つけた良い要約です:

復帰(CR)文字(0x0D\r)は、カーソルを次の行に進めずに行の先頭に移動します。この文字は、CommodoreおよびEarly Macintoshオペレーティングシステム(OS-9以前)で改行文字として使用されます。

改行(LF)文字(0x0A\n)は、カーソルを行の先頭に戻らずに次の行に移動します。この文字は、UNIXベースのシステム(Linux、Mac OSXなど)で改行文字として使用されます

行末(EOL)シーケンス(0x0D 0x0A\r\n)は、実際にはCR文字とLF文字の組み合わせである2つのASCII文字です。カーソルを次の行とその行の先頭の両方に移動します。この文字は、Microsoft Windows、Symbian OSなど、他のほとんどの非UNIXオペレーティングシステムで改行文字として使用されます。

ソース


1
「垂直タブ」文字はカーソルを下に移動し、LF文字ではなく行内の位置を維持します。LFはEOLです。
12431234123412341234123 2016年

2
@TaylorLeese / r / nと/ n / rは同じですか?
Vicrobot、2018

175

これだけを述べる答えはないので、簡潔に要約します。

キャリッジリターン(MAC pre-OSX)

  • CR
  • \ r
  • ASCIIコード13

改行(Linux、MAC OSX)

  • LF
  • \ n
  • ASCIIコード10

キャリッジリターンとラインフィード(Windows)

  • CRLF
  • \ r \ n
  • ASCIIコード13、次にASCIIコード10

奇妙な形式のASCIIコードが表示された場合、それらは通常、基数8(8進数)または基数16(16進数)の異なる基数/基数の13と10です。

http://www.bluesock.org/~willg/dev/ascii.html


46

Jeff Atwoodがこれについて最近ブログに投稿しました:Great Newline Schism

ここにウィキペディアの本質があります:

シーケンスCR + LFは、テレタイプマシン(通常はASR33)をコンソールデバイスとして採用していた多くの初期のコンピューターシステムで一般的に使用されていました。これらのシステムでは、こうしたハードウェアの詳細をアプリケーションから隠すデバイスドライバーの概念がまだ十分に開発されていないため、テキストは通常​​、これらのプリンターと互換性を持つように定期的に構成されていました。アプリケーションはテレタイプマシンと直接通信し、その慣例に従う必要がありました。2つの機能の分離により、印字ヘッドが1文字の時間で右端から次の行の先頭に戻ることができなかったという事実が隠されました。そのため、シーケンスは常に最初にCRで送信されました。実際、多くの場合、プリントヘッドに左マージンに移動する時間を与えるために、余分な文字(無関係なCRまたはNUL、無視されます)を送信する必要がありました。テレタイプがより高いボーレートのコンピューター端末に置き換えられた後でも、多くのオペレーティングシステムは、ディスプレイをスクロールするために複数の文字時間を必要とする安価な端末との互換性のために、これらのフィル文字の自動送信をサポートしていました。


5
+1この単純な理解によって、私は組み合わせが来る順序をいつも覚えています。今日でも、どのようなインクジェットプリンターでもこの機械的なロジックを見ることができます(私は学ぶのが嫌いなので、理解するのが大好きです)。私の他のメモリトリックは、 "mac?Return to sender"と "NewLineFeed"です(NL === LFを覚えて、\ nを覚えておく必要があります。CRには既にRの略語が含まれているためです)
GitaarLAB

3
「疑わしい...タイミングには2つの制御コードが必要でした」。それはそれが言うことではありません。追加のCRとNULは、元のCR LFではなく、戻ってくる時間を与えるためにここにあると述べています。
ジュリアンルソー14

11
@エイドリアンペルソナ体験をしませんか?1)私の昔のテレタイプ時代には、私たちが使用していたプリンターが必要でした<CR><CR><LF>-もちろん、私は1つだけで実験しました<CR><CR><LF>A長い列を送った後、キャリッジが完全に戻る前に印刷されているのが聞こえましA
John Burger

11
@エイドリアン2)忘れないでください。これは、各キャラクターが正確に1つの機能を実行する電気機械の時代でした。私たちはしばしば、行を印刷し、次に<CR><CR>正しい数のスペースを送信して入力し、同じ単語を再印刷することによって単語を強調しました。
John Burger

3
@エイドリアン3)そして最後に、これはASCIIではなくバウドット(またはマレーコード)を使用していました。1つのスタートビットと1.5ストップビットの間の5つのデータビット。どうすれば半分ほど食べられますか?次の文字の送信を開始する前に半分の時間待機して、プリントヘッドが中央に戻る時間を与えます。
John Burger

16

CR-ASCIIコード13

LF-ASCIIコード10。

理論的には、CRはカーソルを最初の位置(左側)に戻します。LFは、カーソルを1行下に移動して1行送ります。これは、昔はプリンタやテキストモードモニタを制御していた方法です。これらの文字は通常、テキストファイルの行の終わりを示すために使用されます。オペレーティングシステムが異なれば、使用される規則も異なります。ご指摘のとおり、WindowsではCR / LFの組み合わせを使用していますが、OSX以前のMacではCRのみを使用しています。


7

ASCIIまたは互換性のある文字セットに基づくシステムは、LF(改行、0x0A、10進数で10)またはCR(キャリッジリターン、0x0D、10進数で13)を個別に使用するか、CRの後にLF(CR + LF、0x0D 0x0A)を続けます。これらの文字はプリンターコマンドに基づいています。改行は1行の用紙がプリンターから送り出されることを示し、キャリッジリターンはプリンターのキャリッジが現在の行の先頭に戻ることを示しました。

詳細はこちらです。


5

「レコードセパレータ」または「行ターミネータ」の悲しい状態は、コンピューティングの暗黒時代の遺産です。

ここで、表現したいものはなんらかの方法で構造化されたデータであり、行、ファイル、プロトコル、メッセージ、マークアップなどを定義するさまざまな抽象化に準拠していることは当然です。

しかし、むかしむかし、これは正確には当てはまりませんでした。アプリケーションの組み込み制御文字とデバイス固有の処理。CRとLFの両方を必要とする頭の悪いシステムは、単にレコードセパレータや行ターミネータを抽象化していませんでした。テレタイプまたはビデオディスプレイを列1に戻すにはCRが必要で、次の行に進むにはLF(今日、NL、同じコード)が必要でした。生データをデバイスにダンプする以外の何かをするという考えは、あまりにも複雑だったと思います。

UnixとMacは実際には行末の抽象化を指定していますが、想像してみてください。悲しいことに、彼らは別のものを指定しました。(Unix、エヘムが最初に来ました。)そして当然、彼らはすでにSOPに「近い」制御コードを使用していました。

今日のほとんどすべてのオペレーティングソフトウェアは、Unix、Mac、またはMSオペレーティングソフトウェアの子孫であるため、混乱の終焉に悩まされています。


1

NLはEBCDIC NL = x'15 'から派生し、CRLF x'odoa asciiと論理的に比較されます。これは、データをメインフレームからミッドレンジに物理的に移動するときに明らかになります。口語的に(難解な人々だけがebcdicを使用するため)NLはCRまたはLFまたはCRLFと同等と見なされています

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.