Nguồn gốc của sự bất đối xứng quay trở lại một cách vào lịch sử điện toán.
Phiên bản ngắn:
<CR> & <LF> (Carriage-Return and Linefeed)
==
\r & \n
Phiên bản dài:
Các màn hình đầu tiên về cơ bản là các phiên bản kỹ thuật số của teletypes (TTY) và được sử dụng mã điều khiển để tạo ra hành vi tương tự với máy in. Vận chuyển trở lại đã đưa con trỏ (hoặc đầu in) vào cột bắt đầu. Linefeed tiến tới hàng tiếp theo (trên màn hình) và đưa giấy về phía trước một dòng.
Đối với máy in, bạn phải thực hiện ghép nối <CR><LF>
hoặc đầu ra của bạn sẽ không đúng. Trên màn hình sớm, vấn đề vẫn được giữ đúng.
DOS (và sorta-Windows sau) tuân theo tiêu chuẩn cũ và lưu văn bản với <CRLF>
.
* Văn bản NIX (vì hầu hết người dùng vi quen thuộc) chỉ sử dụng <LF>
cho hiệu quả.
Để kiểm tra trong Windows, hãy sử dụng Word / Wordpad và lưu một vài dòng văn bản "dưới dạng: Văn bản - định dạng MS-DOS". Sau đó mở cùng một tệp trong Notepad. Nó sẽ trông bình thường. Sau đó lưu cùng một tệp trong Word / Wordpad "dưới dạng: Văn bản". Notepad sẽ bỏ qua tất cả các dòng mới và chạy các dòng với nhau. [Định dạng văn bản của Notepad mặc định là \r\n
kết hợp trong khi Word / Wordpad mặc định thành \n
.]
\ r là mã tương đương với <CR>
\ n là mã tương đương với <LF>
Và theo kinh nghiệm (rất hạn chế) của tôi với vi, nó sẽ cố gắng "sửa" sự <CRLF>
kết hợp từ trình soạn thảo văn bản DOS của tôi. cuối cùng vi loại bỏ một ký tự, thay thế bằng <NUL>
. Một phần lớn lý do tôi đã ngừng sử dụng vi.
\r
là<CR>
và\n
là<LF>
. Nó không giải quyết câu hỏi thực tế tại sao\n\r
hành xử khác nhau trong các bối cảnh khác nhau.