2010-09-29 36 views
5

Cả hai đều có nghĩa là "dòng mới" nhưng khi nào được sử dụng trên dòng khác?Sự khác nhau giữa n và r n là gì?

+0

Nếu bạn bỏ lỡ '\ r', việc vận chuyển sẽ không quay trở lại vị trí bắt đầu của nó ;-) – chiccodoro

+0

haha ​​đẹp 7 câu trả lời trong 5 phút .. chỉ với 29 lượt xem, có nghĩa là 1/4 người đã viết câu trả lời :) –

+0

Nhưng điều này chắc chắn nhất là ngôn ngữ không rõ ràng của _not_. '\ r \ n' là các hàm seqeunces thoát chung trong nhiều c và c như các ngôn ngữ, nhưng chắc chắn không phải tất cả các ngôn ngữ. – Oded

Trả lời

16

\r\n là một của Windows Phong cách

\n là một POSIX Phong cách

\r là một cũ pre-OS X Mac Style, Modern Mac của sử dụng POSIX Style.


\r là một trở carrige và \n là một thức ăn đường, trong máy tính cũ nơi nó không có màn hình, chỉ có máy in để thoát khỏi chương trình kết quả cho người sử dụng, nếu bạn muốn có được in từ nhìn chằm chằm mới dòng từ trái, bạn phải có được \n cho dòng Thức ăn, và \r cho được Vận chuyển trở lại đến vị trí bên trái nhất, đây là từ các máy tính cú pháp cũ lưu vào thời gian này trên nền tảng Windows.

+0

Lưu ý rằng '\ r' chỉ là" Mac Style "dành cho Mac OS X trước. Mac hiện đại sử dụng phong cách POSIX, vì chúng cuối cùng dựa trên một dẫn xuất BSD. –

+0

@Tyler McHenry: cảm ơn xem xét, cập nhật! ;-) – Svisstack

+1

CR + LF thường được sử dụng trong nhiều giao thức mạng (như HTTP), bất kể hệ điều hành được sử dụng để truyền dữ liệu. '\ r' thường được ánh xạ tới CR bất cứ khi nào hệ thống đích sử dụng ASCII hoặc Unicode làm hệ thống ký tự của nó. (Nếu hệ thống đích sử dụng EBCDIC, thì '\ r' có thể không có ánh xạ.)' \ N' thì phức tạp hơn, vì nó phụ thuộc vào ngữ cảnh. Nó thường được ánh xạ tới một mã ASCII/Unicode LINE FEED, nhưng nó không phải lúc nào cũng đơn giản. Câu trả lời cho câu hỏi "Có thể trùng lặp" có chi tiết. –

1

'\ n' là mặc định trong Unix, '\ r \ n' là mặc định trong Windows.

2

\ n chỉ là dòng mới, \ r \ n là dòng mới và dấu ngã dòng (ví dụ: di chuyển con trỏ sang bên trái).

1

Hệ điều hành khác nhau xử lý dòng mới theo cách khác. Dưới đây là danh sách ngắn các thông dụng phổ biến nhất: DOS và Windows

Chúng mong đợi một dòng mới là kết hợp của hai ký tự, cụ thể là '\ r \ n' (hoặc 13 tiếp theo là 10).

Unix (và do đó Linux cũng vậy)

Unix sử dụng một '\ n' để chỉ một dòng mới.

Mac

Máy Mac sử dụng một đơn '\ r'.

vì vậy điều này gây ra sự cố khi bạn chuyển ứng dụng của bạn từ cửa sổ sang mac khi bạn đang sử dụng đường dẫn thư mục và giống nhau.

0

Sự khác biệt là giữa các hệ điều hành khác nhau, trên Windows, kí tự xuống dòng là \r\n trong khi trên Linux nó chỉ là \n Mac OSX vừa \r của nó thực sự chỉ là vấn đề của những gì các nhà thiết kế của hệ điều hành đã làm cho nó trở thành

1

\ n có nghĩa là dòng mới. Nó có nghĩa là con trỏ phải đi đến dòng tiếp theo.

\ r có nghĩa là vận chuyển trở lại. Nó có nghĩa là con trỏ sẽ quay trở lại đầu dòng.

Các chương trình Unix và Unix thường chỉ cần một dòng mới (\ n).

Chương trình Windows và Windows thường cần cả hai.

1

Đây là cách dòng mới được thể hiện trong hệ điều hành Windows (\ r \ n) và Linux (\ n)

Trên Unix \ r là một vận chuyển trở lại (CR) và \ na Dòng thức ăn (LF) cùng nhau xảy ra để trở thành Windows newline số nhận dạng và bạn đang thay thế chúng bằng một định danh dòng mới Unix.

Trên Windows, \ r cũng là CR, nhưng \ n là kết hợp CR và LF. Vì vậy, hiệu quả bạn đang cố gắng để thay thế CR + CR + LF với CR + LF. Không làm cho nhiều ý nghĩa , làm điều đó.

Từ "perldoc perlop": Tất cả các hệ thống sử dụng "" \ n "" ảo để biểu diễn trình kết thúc dòng, được gọi là "dòng mới". Không có thứ gì như một ký tự dòng mới không thay đổi. Nó chỉ là một ảo tưởng rằng hệ điều hành, trình điều khiển thiết bị, thư viện C và Perl tất cả âm mưu để bảo tồn. Không phải tất cả các hệ thống đều đọc "" \ r "" dưới dạng ASCII CR và "" \ n "" dưới dạng ASCII LF. Ví dụ: trên máy Mac, các máy này được đảo ngược và trên các hệ thống không có đầu cuối dòng, in "" \ n "" có thể phát ra không có dữ liệu thực tế. Nói chung, hãy sử dụng "" \ n "" khi bạn có nghĩa là "dòng mới" cho hệ thống của bạn, nhưng sử dụng ASCII theo nghĩa đen khi bạn cần một ký tự chính xác. Ví dụ: hầu hết các giao thức mạng mong đợi và thích CR + LF ("" \ 015 \ 012 "" hoặc "" \ cM \ cJ "") cho các ký tự dòng, và mặc dù chúng thường chỉ chấp nhận "" \ 012 "" , họ hiếm khi chịu đựng chỉ "" \ 015 "". Nếu bạn có thói quen sử dụng "" \ n "" để kết nối mạng, bạn có thể bị đốt cháy một ngày nào đó.

0

Trong C#, bạn chỉ có thể sử dụng Environment.NewLine

+0

Trớ trêu thay, mặc dù đây là mức độ ưu tiên sử dụng trên "\ n" hoặc "\ r \ n" (ít nhất là trong DOT NET), nó không thực sự trả lời câu hỏi gốc. – mickeyf

Các vấn đề liên quan