`^ M` na końcu każdego wiersza plików tekstowych generowanych w systemie Windows

10

Zastanawiałem się, dlaczego jeśli otworzysz plik tekstowy utworzony w Notatniku Windows pod Uniksem, przekonasz się, że ma on ^Mtam, gdzie powinna być nowa linia?

Rozumiem, że w systemie Windows każda linia jest zakończona \r\n, tj. 0x0D0AW ASCII, podczas gdy ^Mma wartość ASCII 0x5E4D. Nie mogę powiązać tych dwóch ze sobą.

Tim
źródło
W systemie Windows możesz użyć lepszego edytora, takiego jak Notepad ++. Pozwoli ci to zapisać pliki z zakończeniami linii UNIX, ale przeglądaj je w systemie Windows tak, jakby miały zakończenia linii Windows. Następnie możesz wyświetlić go w obu systemach operacyjnych.
Kevin
Zobacz także podejście Jeffa Atwooda
nico

Odpowiedzi:

19

Masz rację, że zakończenia linii są ważne; oba systemy operacyjne oczekują, że linia skończy się na „\ n”, ale system Windows dodaje również „\ r”, zanim ten uniks się nie spodziewa, więc programy uniksowe będą wypisywać „\ r” na swój sposób.

Plik tak naprawdę nie kończy się na dwóch znakach „^” i „M”, jest to po prostu powszechny sposób reprezentowania znaków niedrukowalnych. Programy wypiszą „^” i literę odpowiadającą wartości bajtu, zaczynając od A dla 1. M jest 13. literą, a „\ r” to kod ASCII 13 (lub 0xD, jak powiedziałeś), więc widzisz „^ M ”

Michał Mrożek
źródło
2
To także skrót dla Ctrl-M, czyli jak uzyskać tę postać za pomocą klawiatury.
Steven Pritchard
7
Możesz używać narzędzi wiersza poleceń dos2unixi unix2doskonwertować pliki tekstowe między formatami.
Chris Nava
1
@Chris Prawda, ale tak naprawdę nie ma nic wspólnego z pytaniem
Michael Mrozek
Dzięki! (1) Zastanawiałem się, jakie programy będą w ten sposób wyświetlać znaki niedrukowalne? Na przykład, czy wszystkie edytory / przeglądarki tekstu działają w ten sposób? (2) jakie rodzaje znaków niedrukowalnych są traktowane w ten sposób, a jakie nie? Na przykład, dlaczego nie tekst wyjście widzów ^Jza \n?
Tim
1
Reprezentacja ^ M poprzedza edytory tekstu GUI o lata, a nawet dekady.
Chris Nava,