2012-04-05 11 views
14

Windowsの改行マーカーはCR+LFであるべきですが、Unixでは改行マーカーはLFです。Windowsで「 n」に新しい行を付けるのはなぜですか?

私はConsole.Write("line1\nline2");のようなものを使用する場合、なぜそれが「適切に」仕事と私の2行を与えるだろうか?私はこの\nが動作しないことを期待しており、\r\nのコンボだけが動作するでしょう。

+1

このようなファイルを表示するために何を使用していますか? – Oded

+2

チャンスはC#が暗黙のうちに変換を行っている可能性があります。 –

+0

私はこの行を 'Console.Write()'を使ってコマンドラインコンソールに表示しています。 – user1032613

答えて

11

'\ n'は改行文字です。伝統的に、プリンタは用紙を1行上に巻いた。 '\ r'はキャリッジリターン文字で、これは伝統的にプリンタヘッドが用紙の左端に移​​動する原因となります。

プリンタとこのように文字を解釈コンソールに

line1\nline2の出力は

line1 
    line2 

多くのコンソール(および編集)、新しいを開始することを意味するために「\ n」を解釈するだろうは、その新しい行の先頭にカーソルを置きます。それはあなたがここに見るものです。

あなたはむしろ、特定の定数をハードコーディングするよりもEnvironment.NewLineを使用する必要があります。

+0

コンソールは私が推測するビューアですか? –

+0

@OAOD:確かに、 'type myFileWithSlashNDelimiters'は、テキストを別々の行または1つの長い行として表示します。どちらがどちらかというと視聴者だとはっきりしていません。私は彼がConsole.Write()を使用していることを明確にする前に答えました。 –

+0

'\ n'はASCIIテーブルの改行文字ですので、もちろん新しい行が得られます。予期せぬことは、 'Console.Write'メソッドは、Askerが提供していない' \ r'とキャリッジリターンを意味するようです。 – H2ONaCl

0

ファイルエンコード!= Console解釈。言い換えれば

CR + LFの「Windowsの標準は、」ファイルのために存在している間、ちょうどLF、または\nは、適切なキャリッジリターンとコンソールウィンドウの新しい行の解釈をもたらしました。

0

\ n改行文字です。 * nixシステムとWindowsシステムの両方で、2行作成する必要があります。 \ rはキャリッジリターンで、筆記用具を行の先頭に移動します。

最近のほとんどのコンソールは/編集者は、それは、\を受け入れるn個の文字をエスケープするときWriteLineメソッドを持つコンソール(にあなたが出力)、\ rを\ nは私の経験で

0

として\ nを解釈するのに十分な弾力性があります。 StreamWriterを使用してWriteLine()を呼び出すと、\ r \ nと入力すると新しい行に移動します。私はコンソールが\ nエスケープ文字をキャリッジリターン\ rなしで受け入れるようにプログラムされていると仮定します。

8

これは、基本となるWindowsコンソールの標準的な動作です。 0x0Aをコンソールに出力すると、ネイティブCアプリはまったく同じように動作します。

もちろん、新しい行には Environment.NewLineを使用する必要があります。 Environment.NewLineは、システムのようなUnix上でのWindows と\n\r\nに解決されます。

関連する問題