CR LF(Windows)、LF(Unix)、CR(Macintosh)の改行タイプの違いを(可能な場合は例を挙げて)知りたい。
\r
あり\n
、特定のプログラミング言語で使用される抽象化です。この質問を閉じると、質問間の根本的な違いがわかりにくくなり、誤った情報が残ります。
\n
すべてのプログラミング言語で同じことを意味するわけではありません。
CR LF(Windows)、LF(Unix)、CR(Macintosh)の改行タイプの違いを(可能な場合は例を挙げて)知りたい。
\r
あり\n
、特定のプログラミング言語で使用される抽象化です。この質問を閉じると、質問間の根本的な違いがわかりにくくなり、誤った情報が残ります。
\n
すべてのプログラミング言語で同じことを意味するわけではありません。
回答:
実際には、どのバイトがファイルに格納されているかについてです。CR
キャリッジリターン(タイプライターの時代)のバイトコードであり、LF
同様にラインフィードのバイトコードです。行末マーカーとして配置されるバイトを参照するだけです。
いつものように、ウィキペディアでもっと多くの情報を。
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つの文字のみを使用することを決定しましたが、お互いにうまく通信できませんでした。 -)
最近のほとんどのテキストエディタとテキスト指向のアプリケーションは、ファイルの行末の規則を自動的に検出し、それに応じて表示できるオプション/設定などを提供しています。
CR+LF
他のシステムでは、一部のWindowsスタイルファイル()が二重改行で表示されることがあります。おそらく、テキストを表示するエディターは、復帰改行と改行の両方を改行区切り文字としてサポートしているため、1が意図されていた場所に2行が作成される場合があります。一方、そうCR+LF
かもしれない最も互換性のある、私はそれが問題なくはないと思います。
これは私が見つけた良い要約です:
復帰(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オペレーティングシステムで改行文字として使用されます。
これだけを述べる答えはないので、簡潔に要約します。
キャリッジリターン(MAC pre-OSX)
改行(Linux、MAC OSX)
キャリッジリターンとラインフィード(Windows)
奇妙な形式のASCIIコードが表示された場合、それらは通常、基数8(8進数)または基数16(16進数)の異なる基数/基数の13と10です。
Jeff Atwoodがこれについて最近ブログに投稿しました:Great Newline Schism
ここにウィキペディアの本質があります:
シーケンスCR + LFは、テレタイプマシン(通常はASR33)をコンソールデバイスとして採用していた多くの初期のコンピューターシステムで一般的に使用されていました。これらのシステムでは、こうしたハードウェアの詳細をアプリケーションから隠すデバイスドライバーの概念がまだ十分に開発されていないため、テキストは通常、これらのプリンターと互換性を持つように定期的に構成されていました。アプリケーションはテレタイプマシンと直接通信し、その慣例に従う必要がありました。2つの機能の分離により、印字ヘッドが1文字の時間で右端から次の行の先頭に戻ることができなかったという事実が隠されました。そのため、シーケンスは常に最初にCRで送信されました。実際、多くの場合、プリントヘッドに左マージンに移動する時間を与えるために、余分な文字(無関係なCRまたはNUL、無視されます)を送信する必要がありました。テレタイプがより高いボーレートのコンピューター端末に置き換えられた後でも、多くのオペレーティングシステムは、ディスプレイをスクロールするために複数の文字時間を必要とする安価な端末との互換性のために、これらのフィル文字の自動送信をサポートしていました。
<CR><CR><LF>
-もちろん、私は1つだけで実験しました<CR>
。<CR><LF>A
長い列を送った後、キャリッジが完全に戻る前に印刷されているのが聞こえましたA
。
<CR><CR>
正しい数のスペースを送信して入力し、同じ単語を再印刷することによって単語を強調しました。
ASCIIまたは互換性のある文字セットに基づくシステムは、LF(改行、0x0A、10進数で10)またはCR(キャリッジリターン、0x0D、10進数で13)を個別に使用するか、CRの後にLF(CR + LF、0x0D 0x0A)を続けます。これらの文字はプリンターコマンドに基づいています。改行は1行の用紙がプリンターから送り出されることを示し、キャリッジリターンはプリンターのキャリッジが現在の行の先頭に戻ることを示しました。
詳細はこちらです。
「レコードセパレータ」または「行ターミネータ」の悲しい状態は、コンピューティングの暗黒時代の遺産です。
ここで、表現したいものはなんらかの方法で構造化されたデータであり、行、ファイル、プロトコル、メッセージ、マークアップなどを定義するさまざまな抽象化に準拠していることは当然です。
しかし、むかしむかし、これは正確には当てはまりませんでした。アプリケーションの組み込み制御文字とデバイス固有の処理。CRとLFの両方を必要とする頭の悪いシステムは、単にレコードセパレータや行ターミネータを抽象化していませんでした。テレタイプまたはビデオディスプレイを列1に戻すにはCRが必要で、次の行に進むにはLF(今日、NL、同じコード)が必要でした。生データをデバイスにダンプする以外の何かをするという考えは、あまりにも複雑だったと思います。
UnixとMacは実際には行末の抽象化を指定していますが、想像してみてください。悲しいことに、彼らは別のものを指定しました。(Unix、エヘムが最初に来ました。)そして当然、彼らはすでにSOPに「近い」制御コードを使用していました。
今日のほとんどすべてのオペレーティングソフトウェアは、Unix、Mac、またはMSオペレーティングソフトウェアの子孫であるため、混乱の終焉に悩まされています。
\n
通常は改行で表されますが、必ずしも改行である必要はありません。