Hướng dẫn what is r n in python? - r n trong python là gì?

Có, tôi biết rằng '\n' viết một dòng mới trong Unix trong khi đối với Windows, có hai chuỗi ký tự: '\r\n'. Tất cả điều này là rất tốt trong lý thuyết, nhưng câu hỏi của tôi là tại sao? Tại sao nhân vật trở lại vận chuyển là thêm trong Windows? Nếu UNIX có thể làm điều đó trong \n tại sao Windows hai ký tự sẽ làm điều này?why? Why the carriage return character is extra in Windows? If UNIX can do it in \n why does it take Windows two characters to do this?

Tôi đang đọc cuốn sách Python của David Beazley và anh ấy nói:

Ví dụ: trên Windows, viết ký tự '\ n' thực sự xuất trình trình tự hai ký tự '\ r \ n' (và khi đọc lại tệp, '\ r \ n' được dịch lại thành một '\ n' tính cách).

Tại sao nỗ lực thêm?

Tôi sẽ thành thật. Tôi đã biết sự khác biệt trong một thời gian dài nhưng chưa bao giờ bận tâm để hỏi tại sao. Tôi hy vọng điều đó sẽ được trả lời ngày hôm nay.

Cảm ơn vì đã dành thời gian cho tôi.

Hỏi ngày 22 tháng 12 năm 2010 lúc 11:38Dec 22, 2010 at 11:38

6

Khả năng tương thích ngược.

Windows tương thích ngược với MS-DOS (mạnh mẽ như vậy, thậm chí) và MS-DOS đã sử dụng quy ước CR-LF vì MS-DOS tương thích với CP/M-80 (phần nào là do tai nạn) sử dụng quy ước CR-LF vì điều đó là cách bạn lái một máy in (vì máy in ban đầu là máy đánh chữ được điều khiển bằng máy tính).

Máy in có một lệnh riêng để di chuyển giấy lên một dòng đến một dòng mới và một lệnh riêng để trả lại cỗ xe (nơi giấy được gắn) trở lại lề trái.

Đó là lý do tại sao. Và, vâng, đó là một sự khó chịu, nhưng đó là một phần của thỏa thuận trọn gói cho phép MS-DOS giành chiến thắng trước CP/M và Windows 95 để giành chiến thắng trước tất cả các GUI khác trên đầu DOS và Windows XP tiếp quản Từ Windows 98.

.

Đối với những người không quen thuộc với máy đánh chữ, đây là một video cho thấy cách gõ đã được thực hiện: http://www.youtube.com/watch?v=lJVGIU_uyeq. Lưu ý rằng tờ giấy được di chuyển trước tiên, và sau đó xe ngựa được trả lại, ngay cả khi nó xảy ra trong một chuyển động đơn giản. Đinh đã thông báo cho người đánh máy rằng phần cuối đã gần, và để chuẩn bị cho nó.

Đã trả lời ngày 22 tháng 12 năm 2010 lúc 12:10Dec 22, 2010 at 12:10

11

Theo như tôi biết điều này trở lại thời của máy đánh chữ.

\r là vận chuyển trở lại, đó là những gì bạn đang gõ trên trang bên trái (hoặc bên phải nếu đó là văn hóa của bạn)

\n là dòng mới, di chuyển giấy của bạn lên một dòng.

Chỉ làm một trong số này trên một máy đánh chữ sẽ đưa bạn vào sai vị trí để bắt đầu viết một dòng văn bản mới.

Khi máy tính xuất hiện, tôi đoán một số người giữ mô hình cũ, nhưng những người khác nhận ra rằng nó không cần thiết và gói gọn một dòng mới đầy đủ như một nhân vật.

Đã trả lời ngày 22 tháng 12 năm 2010 lúc 11:45Dec 22, 2010 at 11:45

Hướng dẫn what is r n in python? - r n trong python là gì?

Matt Ellenmatt EllenMatt Ellen

3.3284 Huy hiệu vàng30 Huy hiệu bạc37 Huy hiệu Đồng4 gold badges30 silver badges37 bronze badges

11

Tôi không biết nếu đây là kiến ​​thức phổ biến, nhưng cần lưu ý rằng CR vẫn được hiểu bởi các trình giả lập thiết bị đầu cuối hiện đại:

$ printf "hey world\rsup\n"
sup world

Đó là tiện dụng cho các chỉ số tiến bộ, ví dụ:

for i in {1..100}
do
    printf "\rLoading... %d%%" $i
    sleep 0.01
done
echo

Đã trả lời ngày 2 tháng 7 năm 2011 lúc 8:01Jul 2, 2011 at 8:01

1

Lịch sử của nhân vật Newline (Wikipedia):

ASCII được phát triển đồng thời bởi ISO và ASA, tổ chức tiền nhiệm của ANSI. Trong giai đoạn 1963, năm1968, các tiêu chuẩn dự thảo ISO đã hỗ trợ việc sử dụng Cr+LF hoặc LF một mình như một dòng mới, trong khi các dự thảo ASA chỉ hỗ trợ Cr+LF.

Trình tự CR+LF được sử dụng phổ biến trên nhiều hệ thống máy tính ban đầu đã áp dụng các máy teletype, thường là ASR33, như một thiết bị điều khiển, vì chuỗi 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 sáng tác 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ị che giấu các chi tiết phần cứng như vậy từ ứng dụng vẫn 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ể trở lại từ phía bên phải đến đầu dòng tiếp theo trong thời gian một nhân vật. Đó là lý do tại sao chuỗi luôn được gửi với CR trước. Trên thực tế, thường cần phải gửi thêm các ký tự (CR bên ngoài hoặc NULS, bị bỏ qua) để cho đầu in thời gian để di chuyển sang lề trái.

Ngay cả sau khi các teletypes được thay thế bằng các thiết bị đầu cuối máy tính với tốc độ baud 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 nhân vật để cuộn màn hình.

MS-DOS (1981) đã thông qua CP/M's Cr+LF; Việc sử dụng CP/M của Cr+LF có ý nghĩa khi sử dụng các thiết bị đầu cuối máy tính thông qua các dòng nối tiếp. Công ước này được kế thừa bởi hệ điều hành Windows sau này của Microsoft.

Hệ điều hành Multics bắt đầu phát triển vào năm 1964 và sử dụng LF một mình làm dòng mới. UNIX tuân theo thực hành Multics, và các hệ thống sau đó theo sau UNIX.

Đã trả lời ngày 22 tháng 12 năm 2010 lúc 13:59Dec 22, 2010 at 13:59

CraigecraigeCraige

3.78120 Huy hiệu bạc 30 Huy hiệu Đồng20 silver badges30 bronze badges

1

Trong lịch sử, nguồn cấp dữ liệu có nghĩa là Platen - con lăn mà bạn nhập - xoay một dòng, khiến văn bản xuất hiện trên dòng tiếp theo ... nhưng trong cột tiếp theo.

Quay trở lại có nghĩa là "trả lại bit mà bạn gõ vào đầu dòng".

Windows sử dụng Cr+LF vì MS-DOS đã làm, vì CP/M đã làm, vì nó có ý nghĩa đối với các dòng nối tiếp.

UNIX đã sao chép quy ước \ n của mình vì Multics đã làm.

Tôi nghi ngờ nếu bạn đào đủ lại, bạn sẽ tìm thấy một sự bất đồng chính trị giữa những người thực hiện!

.

Đã trả lời ngày 22 tháng 12 năm 2010 lúc 11:40Dec 22, 2010 at 11:40

Frank Sheararfrank SheararFrank Shearar

16.6K7 Huy hiệu vàng48 Huy hiệu bạc84 Huy hiệu đồng7 gold badges48 silver badges84 bronze badges

3

Điều gì với mọi người hỏi "Tại sao Unix có thể làm \n chứ không phải Windows"? Đó là một câu hỏi kỳ lạ.

  1. Hệ điều hành hầu như không liên quan gì đến nó. Đó là vấn đề làm thế nào các ứng dụng, thư viện, giao thức và định dạng tệp đối phó với mọi thứ. Khác với nơi HĐH đọc/ghi các lệnh cấu hình dựa trên văn bản hoặc dòng lệnh, không có ý nghĩa gì khi lỗi hệ điều hành.
  2. Hầu hết các ứng dụng Windows có thể đọc cả \n
    for i in {1..100}
    do
        printf "\rLoading... %d%%" $i
        sleep 0.01
    done
    echo
    
    0 đều ổn. Họ cũng xuất hiện
    for i in {1..100}
    do
        printf "\rLoading... %d%%" $i
        sleep 0.01
    done
    echo
    
    0 để mọi người hạnh phúc. Một chương trình không chỉ đơn giản là "làm" \n hoặc
    for i in {1..100}
    do
        printf "\rLoading... %d%%" $i
        sleep 0.01
    done
    echo
    
    0 - nó chấp nhận cái này, cái kia hoặc cả hai, và đầu ra cái này, cái kia hoặc cả hai.
  3. Là một lập trình viên, điều này thực sự hầu như không bao giờ làm phiền bạn. Thực tế, mọi ngôn ngữ/nền tảng đều có các cơ sở để viết đúng dòng cuối và đọc mạnh mẽ nhất. Lần duy nhất tôi phải giải quyết vấn đề là khi tôi viết một máy chủ HTTP - và đó là vì một trình duyệt nhất định (gợi ý: trình duyệt phổ biến nhất tiếp theo sau IE) đang thực hiện \n thay vì chính xác ____10.
  4. Một câu hỏi thích hợp hơn nhiều là, tại sao nhiều ứng dụng Unix hiện đại chỉ xuất hiện \n hoàn toàn biết rằng có một số giao thức và chương trình không thích nó?

Đã trả lời ngày 22 tháng 12 năm 2010 lúc 14:51Dec 22, 2010 at 14:51

Rei Miyasakarei MiyasakaRei Miyasaka

4.5311 Huy hiệu vàng31 Huy hiệu bạc35 Huy hiệu Đồng1 gold badge31 silver badges35 bronze badges

2

Lý do các quy ước giữ trên các hệ thống khác nhau của họ (\ n trên các hệ thống loại Unix, \ r \ n trên Windows, v.v.) là một khi bạn đã chọn một quy ước, bạn không thể thay đổi nó mà không phá vỡ một loạt các tệp của mọi người. Và điều đó thường được cau mày.

Các hệ thống loại UNIX đã được phát triển (những ngày rất sớm) bằng cách sử dụng các mô hình khác nhau của Teletype và đến một lúc nào đó, ai đó đã quyết định thiết bị nên vận chuyển trở lại khi thực hiện nguồn cấp dữ liệu.

Windows đến từ DOS, vì vậy đối với Windows, câu hỏi thực sự là: Tại sao DOS sử dụng trình tự CR/LF này? Tôi đoán nó có liên quan đến CP/M, trong đó DOS có một số nguồn gốc. Một lần nữa, các mô hình cụ thể của Teletype có thể đã đóng một vai trò.

Đã trả lời ngày 22 tháng 12 năm 2010 lúc 11:54Dec 22, 2010 at 11:54

Michael Kohnemichael KohneMichael Kohne

9,9481 Huy hiệu vàng34 Huy hiệu bạc43 Huy hiệu đồng1 gold badge34 silver badges43 bronze badges

3

Đây là một câu trả lời từ nguồn tốt nhất - Microsoft. Tại sao dòng kết thúc dòng cr+lf?

Giao thức này bắt nguồn từ thời của Teletypewriter. CR là viết tắt của "Return Return" - Nhân vật điều khiển CR đã trả lại đầu in ("vận chuyển") cho cột 0 mà không tiến hành giấy. LF là viết tắt của "LineFeed" - ký tự điều khiển LF đã nâng cao một dòng giấy mà không di chuyển đầu in. Vì vậy, nếu bạn muốn trả lại đầu in về cột 0 (sẵn sàng in dòng tiếp theo) và tiến lên giấy (để nó in trên giấy mới), bạn cần cả CR và LF.

Nếu bạn truy cập các tài liệu giao thức Internet khác nhau, chẳng hạn như RFC 0821 (SMTP), RFC 1939 (POP), RFC 2060 (IMAP) hoặc RFC 2616 (HTTP), bạn sẽ thấy tất cả chúng đều xác định CR+LF là Trình tự chấm dứt dòng. Vì vậy, câu hỏi thực sự không phải là "tại sao CP/M, MS-DOS và Win32 sử dụng Cr+LF làm Kẻ hủy diệt dòng?" Nhưng đúng hơn là "Tại sao người khác chọn khác với các tài liệu tiêu chuẩn này và sử dụng một số Kẻ hủy diệt dòng khác?"

UNIX thông qua LF đơn giản làm trình tự chấm dứt dòng. Nếu bạn nhìn vào các tùy chọn STTY, bạn sẽ thấy tùy chọn ONLCR chỉ định xem có nên thay đổi LF thành CR+LF hay không. Nếu bạn hiểu sai cài đặt này, bạn sẽ nhận được văn bản cầu thang, trong đó

each
    line
        begins

trong đó dòng trước rời đi. Vì vậy, ngay cả Unix, khi còn lại ở chế độ thô, yêu cầu Cr+LF chấm dứt các dòng. CR ngầm trước LF là một phát minh của Unix, có lẽ là một nền kinh tế, vì nó tiết kiệm một byte trên mỗi dòng.

Tổ tiên Unix của ngôn ngữ C đã mang quy ước này vào tiêu chuẩn ngôn ngữ C, chỉ yêu cầu "\ n" (mã hóa LF) để chấm dứt các dòng, đặt gánh nặng lên các thư viện thời gian chạy để chuyển đổi dữ liệu tệp thô thành các dòng logic.

Ngôn ngữ C cũng đã giới thiệu thuật ngữ "Newline" để thể hiện khái niệm "Terminator dòng chung".Tôi được thông báo rằng ủy ban ASCII đã thay đổi tên của ký tự 0x0a thành "Newline" vào khoảng năm 1996, vì vậy mức độ nhầm lẫn đã được nâng lên thậm chí còn cao hơn.

Hướng dẫn what is r n in python? - r n trong python là gì?

Đã trả lời ngày 30 tháng 9 năm 2017 lúc 5:47Sep 30, 2017 at 5:47

Ondra žižkauondra žižkaOndra Žižka

2673 Huy hiệu bạc6 Huy hiệu Đồng3 silver badges6 bronze badges

Điều gì có nghĩa là \ r và \ n?

\ n có nghĩa là dòng mới. Có nghĩa là con trỏ phải đi đến dòng tiếp theo. \ r có nghĩa là trả về vận chuyển.Nó có nghĩa là con trỏ nên quay trở lại đầu dòng. It means that the cursor must go to the next line. \r means carriage return. It means that the cursor should go back to the beginning of the line.

RN là gì?

\ r \ n là kết thúc dòng tiêu chuẩn cho các định dạng văn bản trên Internet.\ r \ n chỉ được sử dụng trên Windows Notepad, dòng lệnh DOS, hầu hết các API Windows và trong một số ứng dụng Windows (cũ hơn).\ n: Các hệ thống UNIX sử dụng \ n làm phần cuối của ký tự dòng của chúng.standard line-termination for text formats on the Internet. \r\n is only used on Windows Notepad, the DOS command line, most of the Windows API, and in some (older) Windows apps. \n: UNIX systems use \n as their end of line character.

\ R làm gì trong chuỗi?

Chỉ các mục (vô hình) trong một chuỗi.\ r di chuyển con trỏ đến đầu dòng.\ n đi một dòng xuống.moves cursor to the beginning of the line. \n goes one line down.