`^ 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», это просто обычный способ представления непечатаемых символов. Программы выведут «^» и букву, соответствующую значению байта, начиная с «А» для 1. «М» - это 13-я буква, а «\ г» - это код ASCII 13 (или 0xD, как вы сказали), поэтому вы видите «^ M»


2
Это также сокращение для Ctrl-M, как вы получаете этот символ с клавиатуры.
Стивен Притчард

7
Вы можете использовать утилиты командной строки dos2unixи unix2dosконвертировать текстовые файлы между форматами.
Крис Нава

1
@Chris Правда, но на самом деле не имеет ничего общего с вопросом
Майкл Мрозек

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

1
Представление ^ M предшествует текстовым редакторам GUI по годам, если не по десятилетиям.
Крис Нава
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.