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ás | Hexa |
ISO-8859-2 | 0xF5 |
UTF-8 | 0x5101 |
UTF-16 | 0xC591 |
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.