`^ M` ở cuối mỗi dòng tệp văn bản được tạo trong Windows


10

Tôi đã tự hỏi tại sao nếu bạn mở một tệp văn bản được tạo trong Windows notepad dưới unix, bạn sẽ thấy rằng nó có ^Mnơi cần có một dòng mới?

Tôi hiểu rằng trong Windows, mọi dòng được kết thúc bằng \r\n, tức là 0x0D0Atrong ASCII, trong khi ^Mcó giá trị ASCII 0x5E4D. Tôi không thể liên hệ hai cái này với cái khác.


Trong Windows, bạn có thể sử dụng trình chỉnh sửa tốt hơn như Notepad ++. Nó sẽ cho phép bạn lưu các tệp có kết thúc dòng UNIX nhưng xem nó trong Windows như thể nó có kết thúc dòng Windows. Sau đó, bạn có thể xem nó trong cả hai hệ điều hành tốt.
Kevin

Câu trả lời:


19

Bạn nói đúng về kết thúc dòng là quan trọng; cả hai hệ điều hành đều mong muốn dòng kết thúc bằng "\ n", nhưng Windows cũng thêm "\ r" trước đó mà unix không mong đợi, vì vậy các chương trình unix sẽ tạo ra "\ r" theo cách riêng của chúng.

Tệp không thực sự kết thúc bằng hai ký tự "^" và "M", đó chỉ là một cách phổ biến để thể hiện các ký tự không thể in được. Các chương trình sẽ xuất ra "^" và một chữ cái tương ứng với giá trị của byte, bắt đầu bằng A cho 1. M là chữ cái thứ 13 và '\ r' là mã ASCII 13 (hoặc 0xD, như bạn đã nói), vì vậy bạn thấy "^ M "


2
Đó cũng là viết tắt của Ctrl-M, đó là cách bạn có được ký tự đó bằng bàn phím.
Steven Pritchard

7
Bạn có thể sử dụng các tiện ích dòng lệnh dos2unixunix2dosđể chuyển đổi các tệp văn bản giữa các định dạng.
Chris Nava

1
@Chris Đúng, nhưng thực sự không liên quan gì đến câu hỏi
Michael Mrozek

Cảm ơn! (1) Tôi đã tự hỏi những chương trình nào sẽ tạo ra các ký tự không thể in theo cách đó? Ví dụ, tất cả các trình soạn thảo / người xem văn bản có hoạt động theo cách đó không? (2) loại ký tự không thể in nào được xử lý theo cách đó và loại nào không? Ví dụ, tại sao không nhắn tin cho người xem ra ^Jcho \n?
Tim

1
Đại diện ^ M có trước các trình soạn thảo văn bản GUI theo năm, nếu không nói là nhiều thập kỷ.
Chris Nava
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.