560

Tôi muốn biết sự khác biệt (với các ví dụ nếu có thể) giữa các loại ngắt dòng CR LF (Windows), LF (Unix) và CR (Macintosh).

|
  • 8

    Rất giống nhau, nhưng không phải là một bản sao chính xác . \nthường được đại diện bởi một nguồn cấp dữ liệu, nhưng nó không nhất thiết là một nguồn cấp dữ liệu.

    – Trần Mỹ Hạnh 00:00:04 02/03/2012
  • 77

    CR và LF là các ký tự điều khiển ASCII và Unicode trong khi \r\nlà các khái niệm trừu tượng được sử dụng trong các ngôn ngữ lập trình nhất định. Kết thúc câu hỏi này che đậy sự khác biệt cơ bản giữa các câu hỏi và duy trì thông tin sai lệch.

    – Lê Dạ Xuân 20:07:39 08/10/2012
  • 5

    @AdrianMcCarthy Đó là một vấn đề với cách các phiếu bầu đóng vai trò là câu trả lời theo cách; một câu trả lời cho rằng hai cái này giống nhau có thể bị đánh giá thấp và sau đó chuyển sang màu rất, rất sai, nhưng chỉ mất 4 phiếu đồng ý (có thể so sánh với upvote) để xảy ra kết quả rất sai, không có cách nào để phản đối việc bỏ phiếu cho đến sau đó điều đó đã xảy ra.

    – Huỳnh Hùng Cường 17:03:17 13/03/2014
  • Công thức này của câu hỏi được thừa nhận là tốt hơn, nhưng nó vẫn dành cho tất cả các mục đích thực tế cho cùng một câu hỏi.

    – Dương Tuấn Ðức 17:22:28 13/03/2014
  • 5

    @ JukkaK.Korpela: Không, nó thực sự không. \nkhông có nghĩa là điều tương tự trong tất cả các ngôn ngữ lập trình.

    – Dương Quang Hòa 17:34:22 13/03/2014
259

Nó thực sự chỉ là về các byte được lưu trữ trong một tập tin. CRlà một mã byte cho trả lại vận chuyển (từ thời của máy đánh chữ) và LFtương tự, cho nguồn cấp dữ liệu dòng. Nó chỉ đề cập đến các byte được đặt làm điểm đánh dấu cuối dòng.

Cách nhiều thông tin hơn, như mọi khi, trên wikipedia .

|
608

CR và LF là các ký tự điều khiển, được mã hóa tương ứng 0x0D(13 thập phân) và 0x0A(10 thập phân).

Chúng được sử dụng để đánh dấu ngắt dòng trong tệp văn bản. Như bạn đã chỉ ra, Windows sử dụng hai ký tự chuỗi CR LF; Unix chỉ sử dụng LF và MacOS cũ (tiền OSX MacIntosh) đã sử dụng CR.

Một viễn cảnh lịch sử tận thế:

Như được chỉ định bởi Peter , CR = Trả về vận chuyển và LF = Nguồn cấp dữ liệu , hai biểu thức có nguồn gốc từ các máy đánh chữ cũ / TTY. LF di chuyển tờ giấy lên (nhưng giữ nguyên vị trí nằm ngang) và CR mang lại "cỗ xe" để ký tự tiếp theo được gõ sẽ ở vị trí ngoài cùng bên trái trên tờ giấy (nhưng trên cùng một dòng). CR + LF đã làm cả hai, tức là chuẩn bị gõ một dòng mới. Khi thời gian trôi qua, ngữ nghĩa vật lý của các mã không được áp dụng và vì không gian bộ nhớ và đĩa mềm ở mức cao, một số nhà thiết kế hệ điều hành đã quyết định chỉ sử dụng một trong các ký tự, họ chỉ không giao tiếp tốt với nhau; -)

Hầu hết các trình soạn thảo văn bản hiện đại và các ứng dụng hướng văn bản đều cung cấp các tùy chọn / cài đặt, v.v. cho phép tự động phát hiện quy ước cuối dòng của tệp và hiển thị tương ứng.

|
  • 1

    Vì vậy, thực sự Windows là hệ điều hành duy nhất sử dụng đúng các ký tự này, Car car Return, theo sau là Line Feed.

    – Hồ Hùng Dũng 10:38:46 03/09/2018
  • 1

    Sau đó, có chính xác không khi nói rằng một tệp văn bản được tạo trên Windows là tương thích nhất trong ba nghĩa là có khả năng hiển thị nhất trên cả ba tập hợp hệ điều hành?

    – Võ Tâm 19:12:32 19/09/2018
389

Đây là một bản tóm tắt tốt mà tôi tìm thấy:

Ký tự Vận chuyển trở lại (CR) ( 0x0D, \r) di chuyển con trỏ đến đầu dòng mà không tiến tới dòng tiếp theo. Ký tự này được sử dụng làm ký tự dòng mới trong các hệ điều hành Commodore và Macintosh sớm (OS-9 trở về trước).

Ký tự Line Feed (LF) ( 0x0A, \n) di chuyển con trỏ xuống dòng tiếp theo mà không quay lại đầu dòng. Ký tự này được sử dụng làm ký tự dòng mới trong các hệ thống dựa trên UNIX (Linux, Mac OSX, v.v.)

Chuỗi kết thúc (EOL) ( 0x0D 0x0A, \r\n) thực sự là hai ký tự ASCII, là sự kết hợp của các ký tự CR và LF. Nó di chuyển con trỏ xuống dòng tiếp theo và đến đầu dòng đó. Ký tự này được sử dụng làm ký tự dòng mới trong hầu hết các hệ điều hành không phải Unix khác bao gồm Microsoft Windows, Symbian OS và các loại khác.

Nguồn

|
136

Vì không có câu trả lời chỉ ra điều này, nên tóm tắt ngắn gọn:

Vận chuyển trở lại (MAC trước OSX)

  • CR
  • \ r
  • Mã ASCII 13

Nguồn cấp dữ liệu (Linux, MAC OSX)

  • LF
  • \ n
  • Mã ASCII 10

Vận chuyển trở lại và nguồn cấp dữ liệu (Windows)

  • CRLF
  • \ r \ n
  • Mã ASCII 13 và mã ASCII 10

Nếu bạn thấy mã ASCII ở định dạng lạ, chúng chỉ là số 13 và 10 trong một cơ số / cơ sở khác nhau, thường là cơ sở 8 (bát phân) hoặc cơ sở 16 (thập lục phân).

http://www.bluesock.org/~willg/dev/ascii.html

|
39

Jeff Atwood có một bài đăng trên blog gần đây về điều này: The Great Newline Schism

Đây là bản chất từ Wikipedia :

Trình tự CR + LF được sử dụng phổ biến trên nhiều hệ thống máy tính đời đầu đã sử dụng máy teletype, điển hình là ASR33, như một thiết bị điều khiển, bởi vì trình tự này được yêu cầu để định vị các máy in đó khi bắt đầu một dòng mới. Trên các hệ thống này, văn bản thường được soạn thảo thường xuyên để tương thích với các máy in này, vì khái niệm trình điều khiển thiết bị ẩn các chi tiết phần cứng như vậy từ ứng dụng chưa được phát triển tốt; các ứng dụng phải nói chuyện trực tiếp với máy teletype và tuân theo các quy ước của nó.Sự tách biệt của hai chức năng che giấu thực tế là đầu in không thể quay lại từ bên phải sang đầu dòng tiếp theo trong thời gian một ký tự. Đó là lý do tại sao chuỗi luôn được gửi với CR đầu tiên. Trên thực tế, thường phải gửi thêm các ký tự (CR hoặc NUL ngoại lai, bị bỏ qua) để cho thời gian đầu in di chuyển sang lề trái. Ngay cả sau khi teletype được thay thế bằng các thiết bị đầu cuối máy tính có tốc độ truyền cao hơn, nhiều hệ điều hành vẫn hỗ trợ gửi tự động các ký tự điền này, để tương thích với các thiết bị đầu cuối rẻ hơn yêu cầu nhiều lần ký tự để cuộn màn hình.

|
  • 1

    +1 Chính nhờ sự hiểu biết đơn giản này mà tôi luôn nhớ theo thứ tự kết hợp đến. Ngay cả ngày nay chúng ta vẫn có thể thấy logic cơ học này trong bất kỳ máy in phun mực nào (tôi thích hiểu vì tôi ghét phải học). Các thủ thuật bộ nhớ khác của tôi là: "mac? Quay trở lại người gửi" và "NewLineFeed" (để nhớ rằng NL === LF và để nhớ \ n, vì CR đã có chữ R viết tắt)

    – Hồ Hùng Dũng 19:52:57 01/02/2013
  • 1

    "Tôi nghi ngờ ... hai mã kiểm soát là cần thiết cho thời gian". Đó không phải là những gì nó nói. Nó nói rằng các CR và NUL bổ sung đang ở đây để dành thời gian cho nó quay trở lại, chứ không phải CR LF ban đầu.

    – Võ Tâm 05:58:12 24/09/2014
  • 1

    @Adrian Bạn sẽ có kinh nghiệm cá nhân? 1) Trong những ngày teletype cũ của tôi, máy in chúng tôi sử dụng bắt buộc <CR><CR><LF>- vì vậy tất nhiên tôi đã thử nghiệm chỉ với một <CR>. Tôi gửi <CR><LF>Asau khi một đường dài, và bạn có thể nghe thấy những Ađược in trước khi vận chuyển trở lại đầy đủ.

    – Hoàng Anh Quốc 17:02:20 11/06/2016
  • 1

    @Adrian 2) Đừng quên, đây là thời đại cơ điện, nơi mỗi nhân vật thực hiện chính xác một chức năng. Chúng tôi thường nhấn mạnh một từ bằng cách in dòng, sau đó gửi <CR><CR>và nhập đúng số lượng khoảng trắng, sau đó in lại cùng một từ: một hình thức nguyên thủy của sự tô đậm.

    – Lý Phương Lan 17:02:33 11/06/2016
  • 1

    @Adrian 3) Và cuối cùng, điều này đã sử dụng Baudot (hoặc mã Murray), không phải ASCII. Năm bit dữ liệu, giữa một bit bắt đầu và một bit rưỡi dừng. Làm thế nào bạn có thể có một nửa? Bằng cách đợi một nửa thời gian trước khi bắt đầu gửi ký tự tiếp theo, để cho thời gian đầu in trở về trung tâm.

    – Tạ Ðức Quảng 17:06:29 11/06/2016
16

Mã CR - ASCII 13

Mã số - ASCII 10.

Về mặt lý thuyết CR trả con trỏ về vị trí đầu tiên (bên trái). LF cung cấp một dòng di chuyển con trỏ xuống một dòng. Đây là cách ngày xưa bạn điều khiển máy in và màn hình chế độ văn bản. Các ký tự này thường được sử dụng để đánh dấu kết thúc dòng trong tệp văn bản. Hệ điều hành khác nhau sử dụng các quy ước khác nhau. Như bạn đã chỉ ra, Windows sử dụng kết hợp CR / LF trong khi máy Mac trước OSX chỉ sử dụng CR, v.v.

|
7

Các hệ thống dựa trên ASCII hoặc một bộ ký tự tương thích sử dụng riêng lẻ (Nguồn cấp dữ liệu, 0x0A, 10 theo số thập phân) hoặc CR (Trả về vận chuyển, 0x0D, 13 theo số thập phân) hoặc CR theo sau bởi LF (CR + LF, 0x0D 0x0A); Các ký tự này dựa trên các lệnh của máy in: Nguồn cấp dữ liệu chỉ ra rằng một dòng giấy sẽ được nạp ra khỏi máy in và việc trả lại vận chuyển cho biết rằng vận chuyển máy in sẽ trở về đầu dòng hiện tại.

Dưới đây là chi tiết .

|
5

Trạng thái đáng buồn của "trình phân tách bản ghi" hoặc "bộ kết thúc dòng" là một di sản của thời kỳ đen tối của máy tính.

Bây giờ, chúng tôi chấp nhận rằng bất cứ điều gì chúng tôi muốn đại diện là theo cách nào đó dữ liệu có cấu trúc và tuân thủ các khái niệm trừu tượng khác nhau xác định các dòng, tệp, giao thức, tin nhắn, đánh dấu, bất cứ điều gì.

Nhưng đã có lúc điều này không chính xác. Các ứng dụng tích hợp các ký tự điều khiển và xử lý dành riêng cho thiết bị. Các hệ thống chết não đòi hỏi cả CR và LF đơn giản là không có sự trừu tượng hóa cho các bộ tách bản ghi hoặc bộ kết thúc dòng. CR là cần thiết để có được màn hình teletype hoặc video quay trở lại cột một và LF (ngày nay, NL, cùng mã) là cần thiết để đưa nó tiến lên dòng tiếp theo. Tôi đoán ý tưởng làm một cái gì đó ngoài việc đổ dữ liệu thô vào thiết bị là quá phức tạp.

Unix và Mac thực sự đã chỉ định một sự trừu tượng cho đầu dòng, hãy tưởng tượng điều đó. Đáng buồn thay, họ chỉ định những người khác nhau. (Unix, ahem, xuất hiện đầu tiên.) Và một cách tự nhiên, họ đã sử dụng mã kiểm soát đã "gần gũi" với SOP

Vì hầu hết tất cả các phần mềm điều hành của chúng tôi ngày nay là hậu duệ của Unix, Mac hoặc MS điều hành SW, chúng tôi bị mắc kẹt với sự nhầm lẫn kết thúc dòng.

|

Câu trả lời của bạn (> 20 ký tự)

Bằng cách click "Đăng trả lời", bạn đồng ý với Điều khoản dịch vụ, Chính sách bảo mật and Chính sách cookie của chúng tôi.

Không tìm thấy câu trả lời bạn tìm kiếm? Duyệt qua các câu hỏi được gắn thẻ hoặc hỏi câu hỏi của bạn.