2012-04-05 29 views
14

Điểm đánh dấu ngắt dòng trên Windows phải là CR+LF trong khi trên Unix, chỉ là LF.Tại sao " n" cung cấp một dòng mới trên Windows?

Vì vậy, khi tôi sử dụng một cái gì đó như Console.Write("line1\nline2");, tại sao nó hoạt động "đúng" và cho tôi hai dòng? Tôi mong đợi điều này \n không hoạt động, và chỉ có một kết hợp của \r\n sẽ hoạt động.

+1

Bạn đang sử dụng gì để xem tệp như vậy? – Oded

+2

Cơ hội là C# đang ngầm thực hiện chuyển đổi cho bạn. –

+0

Tôi đang in dòng này vào bảng điều khiển dòng lệnh, sử dụng 'Console.Write()'. – user1032613

Trả lời

11

'\ n' là ký tự Dòng nguồn cấp dữ liệu. Theo truyền thống, nó làm cho máy in cuộn giấy lên một dòng. '\ r' là ký tự Chuyển về vận chuyển, theo truyền thống khiến đầu máy in chuyển sang cạnh trái của giấy.

trên máy in phun và console mà giải thích các nhân vật theo cách này, đầu ra của line1\nline2 sẽ

line1 
    line2 

Nhiều console (và biên tập viên) sẽ giải thích '\ n' để có nghĩa là bạn muốn bắt đầu một mới dòng định vị con trỏ ở đầu dòng mới đó. Đó là những gì bạn thấy ở đây.

Bạn nên sử dụng Environment.NewLine thay vì mã hóa cứng bất kỳ hằng số cụ thể nào.

+0

Giao diện điều khiển là một người xem tôi đoán? –

+0

@OAOD: Chắc chắn, 'loại myFileWithSlashNDelimiters' sẽ hiển thị văn bản, hoặc là các dòng riêng biệt hoặc một dòng dài. Không chắc chắn điều đó, nhưng dù sao thì đó là một người xem. Tôi đã trả lời trước lời nhận xét của anh ấy rằng anh ấy đang sử dụng Console.Write(). –

+0

'\ n' là ký tự Dòng nguồn trong bảng ASCII, do đó, tất nhiên, bạn sẽ có một dòng mới. Điều bất ngờ là phương thức 'Console.Write' dường như cũng ngụ ý' \ r', mà người hỏi không cung cấp, và đó là trả về vận chuyển. – H2ONaCl

0

Mã hóa tệp! = Console giải thích.

Nói cách khác, trong khi "Windows Chuẩn" của CR + LF tồn tại cho các tập tin, chỉ là LF, hoặc \n đã dẫn đến sự trở về vận chuyển thích hợp và giải thích dòng mới trong giao diện điều khiển cửa sổ.

0

\ n là ký tự nguồn cấp dữ liệu dòng. Trên cả hai hệ thống * nix và Windows, nó sẽ tạo 2 dòng. \ R là trở về vận chuyển, nó di chuyển công cụ viết đến đầu dòng.

Hầu hết các console hiện đại/biên tập viên có đủ kiên cường để giải thích \ n như \ r \ n

0

Theo kinh nghiệm của tôi, khi bạn xuất ra Console với WriteLine() nó chấp nhận \ n thoát khỏi nhân vật. Khi bạn đang sử dụng một StreamWriter và gọi WriteLine() nó làm cho bạn gõ \ r \ n để di chuyển đến một dòng mới. Tôi cho rằng giao diện điều khiển đã được lập trình để chấp nhận ký tự thoát \ n mà không trả về vận chuyển \ r.

8

Đây chỉ là hành vi tiêu chuẩn của bảng điều khiển Windows bên dưới. Ứng dụng C gốc sẽ thực hiện chính xác nếu bạn xuất 0x0A sang bảng điều khiển.

Tất nhiên, bạn nên sử dụng Environment.NewLine cho các dòng mới của mình. Environment.NewLine giải quyết thành \r\n trên Windows và \n trên các hệ thống giống Unix.

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