Sorvége jelek Linuxban, Windowsban, MacOSben

Windows: CR LF
Linux: LF
MacOS: CR

CR: kocsi vissza
LF: újsor

Jel Karakter Hexa Okt Dec Esc. szekvencia
CR ^M 0x0d 015 13 \r
LF ^J 0x0a 012 10 \n

Következmény: Szöveges dokumentumok (plain text, azaz csak a sima txt állományok, pl. forráskód) esetén az egyik op.rendszeren megírt/szerkesztett állomány a másik rendszeren "érdekesen" jelenik meg.

Pl.: Windows alatt létrehozunk egy szöveges állományt, akkor a win-es szövegszerkesztők minden sort CRLF jelekkel zárnak le, ha áthozzuk linux alá és megnyitjuk egy linuxos szövegszerkesztővel (mivel a linux csak LF jelet várna) minden sorvége jel előtt láthunk egy ^M karaktert.

Megj.: Manapság ez már nem jellemző, hiszen a mai linuxos szövegszerkesztők képesek intelligensen kezelni az ilyen problémákat és úgymond kitalálják, hogy ez most egy windowsos szövegfile és megfelelőlen jelenítik meg, ugyanígy windows alá és vannak olyen text-file szerkesztők, amik ugyanígy okosan kezelik a más op.rendszer alól származó állományokat. De természetesen előfordulhat, hogy belefutunk a fenti problémába, így nem árt, ha ismerjük a megoldást:

Win -> Unix átalakítás:
tr -d "\015" < filenev

Egyéb láthatatlan jelek (sorvége, sor végi szóközök) láthatóvá tétele:
cat -e filenev

Karakterkódolás, avagy néha miért nem jelennek meg rendesen az ékezetes betűk

Erről olvashatsz részletesen a http://progkor.inf.elte.hu/utf8/index.html címen, itt megtalálod, hogy milyen beállításokra lehet szükséged ahhoz, hogy rendesen működjenek az ékezetes karakterek.

Egy kis összefoglaló, hogy miért is van ez a kálvária

Mint tudjuk a számítógépek minden számok formájába tárolnak, így ha mi azt írjuk, hogy 'A' a gépnek az is egy szám. Azaz minden karakterhez hozzá kell rendelni egy számot. Erre kidolgoztak különféle ún. karaktertáblákat, azaz olyan táblázatokat, melyik megmondják, hogy melyik karakternek mi legyen a "kódja", azaz az a szám, amivel a számítógép azonosítja. Ilyen táblázat pl az ASCII kódtábla, ahol pl. az 'A' a 65-ös számot kapta. Ez 256 karaktert tartalmazott (0-tól 255-ig hozzárendelve a számokat az egyes karakterekhez). Az első 32 (0-31)karakter ún. non-printable karakter pl. a 13-sal és a 10-sel már találkoztunk a fenti táblázatban. A 32-es a space, utána 127-ig jönnek a "normális" karakterek úgy mint angol ABC kis -és nagybetűi és egyéb a billentyűzetről ismerős jelek :).
Az egyéb karakterek, mint pl a magyar abc ékezetes betűi vagy más országok speciális jelei a maradék helyre kerültek. Ráadásul úgy, hogy a nálunk használt kódtáblában a 130-as pl az 'é' betű, de egy másik országban lehet, hogy ez egy más karaktert takart.
Nagyjából ezt írta le az ISO-8859 -es szabvány. Nagyon sokáig az ún. ISO-8859-2 (más néven közép-európai windows vagy Latin2) kódolás volt érvényben. (Ennélfogva a linuxok is ezt használták.)

Mi volt ezzel a baj?

  • Nem volt egységes. Az egyes nemzetek a kódtáblában fennmaradó helyet a saját igényeik szerint töltötték ki
  • Nagyon sok abc egész egyszerűen nem fért el 256 helyen. Gondoljunk pl. a kínai abc-re

A megoldás

Ezen problémák orvoslására találták ki a Unicode szabványt, amely nem 1 byte-ot használ egy karakter kódjának tárolására, azaz nem 256 hely áll rendelkezésre. Manapság két változata van az Unicode-nak az UTF-8 és az UTF-16.

A probléma

Azonban van egy kis probléma, nevezetesen nem lehetett megoldani a kompatibilitást, azaz eddig "tudták" a számítógépek, hogy a 130 az a 'é' betű (legalábbis nálunk) és amíg ISO kódolást használnak addig ez nem is baj, de mi van ha egy gépet átállítanak Unicode-ra, onnantól kezdve neki a 130 teljesen mást fog jelenteni.
Mi adódik ebből? Ha megpróbál két különböző karakter kódolású gép kommunikálni (értjük most ez alatt azt, hogy pl én megírok egy szövegfile-t egy ISO-8859 -es kódolásra beállított gépen és átviszem azt egy Unicode-osra), az ékezetes karakterek helyén mindenféle furcsa jelek jelennek meg.

Nézzünk egy példát, nézzük meg az "ő" kódját:

KódolásHexa
ISO-8859-20xF5
UTF-80x5101
UTF-160xC591

Azaz még az UTF-8 és az UTF-16 sem egyezik meg!
Azért bizonyos fokú kompatibilitás megmaradt, nevezetesen az angol ABC kis -és nagybetűi ugyanazzal a kóddal rendelkeznek, egész pontosan az eredeti ascii tábla első 128 karakterének a kódját nem változtatták meg.

Remélem így már érthető(bb), hogy miért van ez az ékezetes karakter mizéria pl. a pandorán vagy a valerin.
Mindenkinek ajánlom a leírás elején szereplő linken található oldal átolvasását, sok bosszúságtól megkímélhet benneteket.