Windows の改行マーカーはCR+LF
、Unix ではLF
.
のようなものを使用するとConsole.Write("line1\nline2");
、なぜ「適切に」機能し、2 行になるのでしょうか。私はこれが機能しないことを期待して\n
おり、の組み合わせのみ\r\n
が機能します。
'\n'
改行文字です。従来、これにより、プリンターは用紙を 1 行上に巻き上げていました。'\r'
はキャリッジ リターン文字で、従来はプリンタ ヘッドが用紙の左端に移動していました。
この方法で文字を解釈するプリンターとコンソールでは、出力は次のようにline1\nline2
なります。
line1
line2
多くのコンソール (およびエディター) は、'\n' を解釈して、新しい行を開始し、その新しい行の先頭にカーソルを配置することを意味します。それがここに表示されます。
特定の定数をハードコーディングするのではなく、Environment.NewLineを使用する必要があります。
ファイル エンコーディング !=Console
解釈。
言い換えれば、CR
+の "Windows 標準" はLF
ファイルに存在しますが、コンソール ウィンドウでは適切なキャリッジ リターンと改行の解釈が行われるのはLF
, またはだけです。\n
私の経験では、WriteLine() を使用してコンソールに出力すると、\n エスケープ文字が受け入れられます。StreamWriter を使用して WriteLine() を呼び出すと、\r\n と入力して新しい行に移動する必要があります。コンソールは、キャリッジ リターン \r なしで \n エスケープ文字を受け入れるようにプログラムされていると思います。
\n は改行文字です。*nix システムと Windows システムの両方で、2 行を作成する必要があります。\r は改行で、筆記具を行頭に移動します。
最新のコンソール/エディタのほとんどは、\n を \r\n と解釈できるほど回復力があります