Nie ma czegoś takiego, jak czysty tekst. Awantura o koniec linii

Nie ma czegoś takiego, jak czysty tekst. Awantura o koniec linii28.03.2020 23:19
Awantura o koniec linii (fot. Pixabay)

Opisywany niedawno standard UTF-8 okazał się być karkołomnym, ale bardzo skutecznym rozwiązaniem problemu stron kodowych i jako jedyne podejście wielobajtowe nie wywołał więcej szkody niż pożytku. Na szczęście z biegiem lat stał się de facto internetowym standardem w poczcie i stronach WWW. Choć jeszcze dekadę temu zdarzało się znaleźć witryny zakodowane w ISO-8859-2, dziś nawet polskie strony stosują UTF-8.

Wydawałoby się zatem, że kodowanie znaków to jedno z tych zagadnień, które po wieloletnich wojnach inżynieryjnych zostało wreszcie rozwiązane, pozostawiając wyłącznie kwestię "legacy", danych stworzonych w czasach bez ujednoliconego standardu, na starych systemach. Wymiana "obecnych" danych nie powinna już nastręczać trudności, bo międzynarodowy charakter przetwarzania danych wręcz wymusił zgodność z UTF-8.

Postęp i elektryfikacja

Życie uczy jednak, że da się pokłócić o wszystko, a mnogość opinii (i w konsekwencji mnogość implementacji) jest nieunikniona. Zachowanie zgodności z ASCII wywołało wprowadzenie zgodności z bardzo, bardzo dawnymi standardami telegraficznymi, teleksami oraz elektrycznymi maszynami do pisania. Otworzyło to wrota piekieł w kwestii tak trywialnej, jak... koniec linii.

Początkowo elektroniczne przetwarzanie tekstu wiązało się jednoznacznie z zamiarem docelowego wydrukowania go. Ponieważ papier nie ma nieskończonej szerokości, a automatyczne łamanie linii jest niejednoznaczne i wymaga przetwarzania, wprowadzono znaki pozwalające przejść wiersz niżej.

Białe znaki włączone: bajty CR i LF widoczne na końcach linii
Białe znaki włączone: bajty CR i LF widoczne na końcach linii

Technicznie, proces "pisania pod spodem" w przypadku automatycznych dalekopisów polega na podniesieniu kartki o jeden wiersz w górę, a następnie przesunięciu pisaka z powrotem na początek papieru. Są to więc dwie czynności, wskutek czego obsługują je dwa sygnały: podanie linii (line feed, LF) oraz powrót pisaka (carriage return, CR). Oba sygnały mają swoje miejsce w tablicy ASCII i wszystkie stosowane kodowania znaków rozumieją zarówno CR, jak i LF.

Wiele rozwiązań prostego problemu

Problemem jest implementacja. Twórcy systemu Unix stwierdzili, że nie każdy plik tekstowy musi od razu iść na drukarkę i wystarczy tylko jedna informacja o tym, że gdzieś kończy się linia. Dlatego pliki stworzone na systemach uniksowych stosują jedynie bajt LF. Klasyczny system Mac OS również twierdzi, że do oznaczania nowej linii wystarczy jeden bajt, ale wybrano do tego celu bajt CR. MS-DOS i klasyczny Windows, a także OS/2 i Windows NT stosują standard ANSI, co zapewne było konsekwencją tworzenia systemu PC DOS pod egidą firmy IBM.

Niepołamane linie i dziwne "^M" na początku: plik z Windows na Linuksie
Niepołamane linie i dziwne "^M" na początku: plik z Windows na Linuksie

Efekty owej rozbieżności prowadzą do tego, że uniksowe pliki tekstowe w systemie Windows wyglądają jak jedna długa linia (i tak też są parsowane na niższych poziomach). Nowsze wersje Windows dokonują w wielu miejscach korekty wizualnej: edytor ISE PowerShella, WordPad, a w późniejszych wydaniach Windows 10 również i Notatnik potrafią wyświetlać pliki z samym LF z poprawnie połamanymi liniami. Skrypty PowerShella z samym LF działają poprawnie (!), ale skryptu CMD już nie.

Gorzej sprawa ma się w drugim kierunku: systemy uniksowe widzą pliki z CR+LF jako tekst ze śmieciowym bajtem na końcu każdej linii. Może to wywoływać problemy podczas parsowania. Skrypty powłoki z takimi śmieciami nie będą poprawnie działać, kod C nie będzie się budować. Wystarczy raz zagapić się i zapisać plik w złym edytorze. Podobną krzywdę można sobie zrobić ze spacjami i tabulacjami w Pythonie... Wiele uniksopododnych systemów zawiera narzędzie pozwalające szybko rozwiązać kłopot śmieciowych CR na końcach linii. Jest nim dos2unix.

Wieczyste niedopatrzenia

Problemu nie da się oczywiście rozwiązać wprowadzeniem symbolu "koniec linii, ale tym razem na serio", bo jest na to za późno. Jest on także czymś innym niż problem ze stronami kodowymi, łatwo zatem o plik w którym równolegle egzystują problemy z łamaniem linii oraz niejasne kodowanie.

Z punktu widzenia systemu, dane to dane. Dopiero bardzo koślawe kodowanie, jak UTF-16, sypiące NULL-ami w środku pliku, może sprawić że jego przetwarzanie skończy się awarią. Znak końca linii sprawia jednak problemy na nieco wyższej warstwie, na przykład powłoce.

Problem końca linii prawdopodobnie pozostanie z nami już na zawsze. Przejście do nowej linii nie jest bowiem ani "powrotem karetki" ani "wysunięciem papieru". Każde podejście jest próbą ujarzmienia przeterminowanych konceptów, więc nie istnieje w takim układzie dobre rozwiązanie.

Szanowna Użytkowniczko! Szanowny Użytkowniku!
×
Aby dalej móc dostarczać coraz lepsze materiały redakcyjne i udostępniać coraz lepsze usługi, potrzebujemy zgody na dopasowanie treści marketingowych do Twojego zachowania. Twoje dane są u nas bezpieczne, a zgodę możesz wycofać w każdej chwili na podstronie polityka prywatności.

Kliknij "PRZECHODZĘ DO SERWISU" lub na symbol "X" w górnym rogu tej planszy, jeżeli zgadzasz się na przetwarzanie przez Wirtualną Polskę i naszych Zaufanych Partnerów Twoich danych osobowych, zbieranych w ramach korzystania przez Ciebie z usług, portali i serwisów internetowych Wirtualnej Polski (w tym danych zapisywanych w plikach cookies) w celach marketingowych realizowanych na zlecenie naszych Zaufanych Partnerów. Jeśli nie zgadzasz się na przetwarzanie Twoich danych osobowych skorzystaj z ustawień w polityce prywatności. Zgoda jest dobrowolna i możesz ją w dowolnym momencie wycofać zmieniając ustawienia w polityce prywatności (w której znajdziesz odpowiedzi na wszystkie pytania związane z przetwarzaniem Twoich danych osobowych).

Od 25 maja 2018 roku obowiązuje Rozporządzenie Parlamentu Europejskiego i Rady (UE) 2016/679 (określane jako "RODO"). W związku z tym chcielibyśmy poinformować o przetwarzaniu Twoich danych oraz zasadach, na jakich odbywa się to po dniu 25 maja 2018 roku.

Kto będzie administratorem Twoich danych?

Administratorami Twoich danych będzie Wirtualna Polska Media Spółka Akcyjna z siedzibą w Warszawie, oraz pozostałe spółki z grupy Wirtualna Polska, jak również nasi Zaufani Partnerzy, z którymi stale współpracujemy. Szczegółowe informacje dotyczące administratorów znajdują się w polityce prywatności.

O jakich danych mówimy?

Chodzi o dane osobowe, które są zbierane w ramach korzystania przez Ciebie z naszych usług, portali i serwisów internetowych udostępnianych przez Wirtualną Polskę, w tym zapisywanych w plikach cookies, które są instalowane na naszych stronach przez Wirtualną Polskę oraz naszych Zaufanych Partnerów.

Dlaczego chcemy przetwarzać Twoje dane?

Przetwarzamy je dostarczać coraz lepsze materiały redakcyjne, dopasować ich tematykę do Twoich zainteresowań, tworzyć portale i serwisy internetowe, z których będziesz korzystać z przyjemnością, zapewniać większe bezpieczeństwo usług, udoskonalać nasze usługi i maksymalnie dopasować je do Twoich zainteresowań, pokazywać reklamy dopasowane do Twoich potrzeb. Szczegółowe informacje dotyczące celów przetwarzania Twoich danych znajdują się w polityce prywatności.

Komu możemy przekazać dane?

Twoje dane możemy przekazywać podmiotom przetwarzającym je na nasze zlecenie oraz podmiotom uprawnionym do uzyskania danych na podstawie obowiązującego prawa – oczywiście tylko, gdy wystąpią z żądaniem w oparciu o stosowną podstawę prawną.

Jakie masz prawa w stosunku do Twoich danych?

Masz prawo żądania dostępu, sprostowania, usunięcia lub ograniczenia przetwarzania danych. Możesz wycofać zgodę na przetwarzanie, zgłosić sprzeciw oraz skorzystać z innych praw wymienionych szczegółowo w polityce prywatności.

Jakie są podstawy prawne przetwarzania Twoich danych?

Podstawą prawną przetwarzania Twoich danych w celu świadczenia usług jest niezbędność do wykonania umów o ich świadczenie (tymi umowami są zazwyczaj regulaminy). Podstawą prawną przetwarzania danych w celu pomiarów statystycznych i marketingu własnego administratorów jest tzw. uzasadniony interes administratora. Przetwarzanie Twoich danych w celach marketingowych realizowanych przez Wirtualną Polskę na zlecenie Zaufanych Partnerów i bezpośrednio przez Zaufanych Partnerów będzie odbywać się na podstawie Twojej dobrowolnej zgody.