"^ M" в кінці кожного рядка текстових файлів, створених під Windows


10

Мені було цікаво, чому, якщо ви відкриєте текстовий файл, зроблений у блокноті Windows під Unix, ви побачите, що в ньому має ^Mбути новий рядок?

Я розумію, що в Windows кожен рядок закінчується \r\n, тобто 0x0D0Aв ASCII, а ^Mмає значення ASCII 0x5E4D. Я не можу пов’язати цих двох від одного до іншого.


У Windows ви можете скористатися кращим редактором, як Notepad ++. Це дозволить вам зберігати файли із закінченнями рядків UNIX, але переглядати їх у Windows так, ніби вони мають закінчення рядків Windows. Тоді ви можете переглянути його в обох ОС.
Кевін

Відповіді:


19

Ви маєте рацію щодо важливості закінчень рядків; обидві ОС очікують, що рядок закінчиться символом "\ n", але Windows також додає "\ r" перед тим, чого unix не очікує, тому програми Unix виведуть "\ r" по-своєму.

Файл насправді не закінчується двома символами "^" та "M", це лише звичайний спосіб представити символи, що не можна друкувати. Програми виведуть "^" і букву, що відповідає значенню байта, починаючи з A для 1. M - 13-а літера, а "\ r" - код ASCII 13 (або 0xD, як ви сказали), тож ви побачите "^ М "


2
Це також коротке використання для Ctrl-M, саме так ви отримуєте цього персонажа за допомогою клавіатури.
Стівен Притчард

7
Ви можете використовувати утиліти командного рядка dos2unixта unix2dosконвертувати текстові файли між форматами.
Кріс Нава

1
@Chris Щоправда, але насправді нічого спільного з питанням не має
Michael Mrozek

Дякую! (1) Мені було цікаво, які програми видаватимуть недруковані символи таким чином? Наприклад, чи всі текстові редактори / глядачі працюють таким чином? (2) які види недрукованих символів трактуються таким чином, а які - не? Наприклад, чому б не текст виходу глядачів ^Jна \n?
Тім

1
Представлення ^ M передує редакторам тексту GUI за роками, якщо не десятиліттями.
Кріс Нава
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.