質問
どのよう \r
や \n
ない、ということでしょうか?と思うので、あなUnix前Windows前Macでもなんなのかどのように異なる、ある検索/戦regexes.
解決
彼らは別の文字です。 \r
は、キャリッジリターンであり、そして\n
は改行である。
「古い」プリンタでは、\r
は、行の先頭に戻って、プリントヘッドを送り、\n
は1行で紙を進めました。両方が次の行に印刷を開始することが必要であった。
\r
を使用することができるかもしれないが、もちろんそれは、今、多少は無関係です。
より重要なことには、Unixの行区切りとして\n
使用する傾向があります。 Windowsは、使用の行区切りとして\r\n
を使用する(OS 9まで)行区切りとMacとして\r
を使用する傾向があります。 (マックOS Xは、UNIX-Yであるので、代わり\n
を使用; \r
をも代わりに使用されるいくつかの互換性の状況があってもよい)
詳細については、ウィキペディア改行記事を参照してください。
編集:これは言語に敏感です。 C#やJavaでは、例えば、\n
常には改行として定義されるユニコードU + 000Aを意味します。意味はプラットフォーム固有であるように、CとC ++では水は、幾分muddierあります。詳細についてはコメントを参照してください。
他のヒント
C、C++、 \n
がコンセプト \r
キャラクター、 \r\n
(ほとんど)携帯性になる場合もあります
考古teletype.印刷ヘッドの位置もラインの一部です。送信する場合は、印字可能な文字のteletype、版画、文字の現在位置に移動し、頭のカラムです。(これは概念的に同じとして、タイプライター、タイプライターは、通常、移動の論文に関してプリントヘッド.)
きた仕上がりに現在の線と、次ラインナップは、あなたなければいけなかった二つの別々のステップ
- 移動のプリントヘッドのときに、その
- 移動中に次の行に折り返します。
ASCIIコードこれらの活動として二つの制御文字:
\x0D
(CR)のプリントヘッドの始ます。(UnicodeコードとしてU+000D CARRIAGE RETURN
.)\x0A
(LF)にプリントヘッドを次の行に折り返します。(UnicodeコードとしてU+000A LINE FEED
.)
のteletypes、早期に技術プリンターでは、人々に実際に実行うことができることと二つの別々の業務です。郵送にCRにないので、LF、印刷を行きを印刷済み。●この許容影響のようなアクセント、大胆なタイプの意味.一部のシステムoverprinted数倍のパスワードから見えるハードコピー.初期シリアルCRT端末、CRのコントロールにカーソルの位置を更新するためにテキストを画面になります。
がほとんどの時間を使うかという次の行に折り返します。ではなく必要な対の制御文字は、システムの可だけます。例えば:
- Unix異を含む現代バージョンのMac)といった、状況に応じた使い分ける改行文字を示すために改行コード.
- 旧前OSX)Macintoshのファイルを使用んのCRの文字を示すために改行コード.
- VMS CP/M、DOS、Windows、多くの ネットワークプロトコル 意見を表明するものではなく、両方CR LF.
- 旧IBMシステムの使用 EBCDIC 標準化にNL--文字のないものASCII文字セットです。Unicodeでは、NLは
U+0085 NEXT LINE
, が、実際の値は、EBCDIC0x15
.
なぜ異なるシステムの選別方法について教えてほしい。のではありませんでしたユニバーサル。がキーボードおそらくは"入"、キーボードを使用"ということに戻した"短運送を返します。実際、シリアル端末を押し返し実際に送のCR文字です。また、テキストエディタで魅力的だけに使用する文字をとったからです。それでいいのかもしれなぜ古いMacです。
現在では 規格, があり 以上 を表す線のブレイクがあります。は非常に珍しく、Unicodeには新キャラクターのように:
U+2028 LINE SEPARATOR
U+2029 PARAGRAPH SEPARATOR
もUnicodeってみた、プログラマーた単純な方法を表すのに最も有用制御コードを気にせずに基礎となる文字セットです。C複数のエスケープシーケンスを表すための制御コード:
\a
(アラート)のリングのteletypeベルまたは端末のビープ音\f
(形飼料)のそれぞれの長所を取り入れた最初のページ\t
(タブ)をそれぞれの長所を取り入れたのプリントヘッドの水平タブ位置
(このリストが意図的に不完全なものです。)
このマッピングさせることができることを コンパイル時ののコンパイラを見る \a
あくびをしてもマジックの値を使ってリングのベルがあります。
通知するこmnemonics直接の相関性をASCII制御コードです。例えば、 \a
い地図 0x07 BEL
.コンパイラが書き込まれるためのシステムを使用以外のものASCIIのホストの文字セット(例えば、EBCDIC).を制御することがわかった特定のmnemonicsがマップされた制御コードその他の文字セット。
Huzzah!携帯性に!
とどまった。C、ただ単に"サムネやエンジン printf("\aHello, World!");
るリングのベル(または音が鳴ります)を出力するものとします。ってしまうことがありました印刷後もに次の行いを知る必要があり、ホストプラットフォームが必要でに先週末、例のギフトショップへの出力に出力します。CR LF?CR?LF?NL?何か?で述します。
C二つのモードI/O:二るようになっています。バイナリモードでは、あらゆるデータを送付し送信します。が文字モードがあり 実行時の 翻訳に変換する特殊文字をどのようなホストプラットフォームのニーズの新ライン(およびその逆).
が、この特殊文字?
これが、実装に依存しすぎがあり、実装に依存しない方法を指定す: \n
.では、いわゆる"改行文字から"と言いました。
この微妙なが重要なポイント: \n
マップで コンパイル時間 へ 実装で定義されています 文字でない値にする(テキストモードをマップされたもので 実行時間 実際の文字(または文字シーケンス)の基本となるプラットフォームに移動次の行に折り返します。
\n
別のその他のバックスラッシュリテラルがあり、またマッピング。この二つのステップマッピングする \n
大きく異なるも \r
, は、単にコンパイル時のマッピングにはCRのもっとも似ている制御コードをどのような基礎となる文字セット)です。
この旅行の多くのCおよびC++プログラマー.また世論調査で100の買い替えることができるようにし少なくとも99にお伝えすること \n
とラインで食事をします。これは完全に真実ではありません。最もすべてのCおよびC++実装を使用LFとしての魔法の中間の値 \n
, その実装です。することが可能であるコンパイラを利用される値が異なります。この場合、ホストの文字セットはASCIIの例の場合はEBCDIC) \n
ほぼ確実にできないLF.
そこで、CとC++:
\r
あります。\n
は魔法の値を取得する翻訳(テキストモード) 実行時の から、ホストプラットフォームの改行を意味論。\r\n
はほとんどいつも携帯す。テキストモードでは、この取得し訳にはCRのプラットフォームの改行列--なくなるだろうか。バイナリモードでは、この取得し訳CRが得られるかについてのマジック値 ない場合があ さLFがない。\x0A
の携帯を示すようなASCII LFが、だいたいするバイナリモードになります。ほとんどのテキスト-モードで実装するように\n
.
- " "=>を返し
" "=>改行または改行 (意味論)
Unixベースのシステムでの利用だけでは" "は終了線します。
- Dos用の" "は終了線します。
- その他の機械では" ".(コモド、アップルII、Mac OS前OS Xなど)
ショート\ Rには、ASCII値13(CR)を有し、\ nは、ASCII値10(LF)を有しています。 Macは(少なくとも、それは前にやった、私は現代のMac用わからない)行の区切り文字としてCRを使用して、* nixのはLFを使用し、Windowsが(CRLF)の両方を使用します。
\r
は、行の先頭を指すように使用され、例えば、そこからテキストを置き換えることができます。
main()
{
printf("\nab");
printf("\bsi");
printf("\rha");
}
この出力を生成します:
hai
\n
は、新しいラインです。
@ジョンスキートの答えに加えます:
これまでのWindowsがR \ nを、Unixの\ n、およびMacの\ rを\使用していた、しかし新しいMacが使用\ nはそれらがUNIXベースだと。
C#で、私は彼らがR \ \ N文字列で使用います。
\ rはキャリッジリターンです。 \ nは改行(ラインフィード)です...何各手段へとOSに依存します。 「\ n」の間の差異に関する詳細については、この記事を読み、 Cでの '\ rをする\ n' が...。
\ R。 (ASCII値は13です) \ nは改行を使用。 (ASCII値は10である)