Előző Főoldal Következő

Régi fájljaink átalakítása

Régebbi Linux felhasználóknak talán már bizonyos korábbi fájljai is UTF-8 kódolást használtak, de talán még a régi Latin-2 kódolást. A könnyebb kezelhetőség érdekében ezeket célszerű egységesen UTF-8 kódolásra alakítani. A kódolás két fő területet érint: a fájlok neveit, illetve tartalmukat.

Fájlnevek konvertálása

A Windows és a Linux gyökeresen különböző filozófiát követ a fájlnevekben szereplő ékezetek terén. A Windows már nagyon régen átállt egységes Unicode alapú megoldásra. Így az ő területén (FAT, VFAT, NTFS stb. típusú partíciókon) lévő fájlneveket elvileg mind Windows, mind UHU-Linux 2.0 alól helyesen kell látnunk. Ezek a fájlnevek tehát remélhetőleg nem szorulnak átnevezésre. Ahol inkább adódhat probléma, azok a Linux partíción (ext2, ext3, reiserfs stb.) található ékezetes fájlnevek, ezeket könnyen lehet, hogy át kell alakítanunk. (Megjegyzés: az UHU-Linux 1.1 és 1.2 is sok helyen UTF-8 kódolást használt a fájlnevekben, így nem kizárt, hogy azokat rendben találjuk.)

Fájlneveink manuális átalakítására gyakorlatilag bármelyik fájlkezelő program átnevezés funkciója használható, ez nem érdemel több említést.

Fájlneveink automatizált, tömeges átalakítására a parancssoros (terminálból indítható) convmv parancsot ajánljuk. Angol nyelvű használati útmutatója a „man convmv” parancs kiadása után olvasható. Néhány példa a használatára:

A „-f Latin2” a régi, a „-t UTF-8” opció pedig az új karakterkészletet adja meg. Ezeket tehát változatlan formában érdemes használni.

A „-i” kapcsoló használata esetén a program plusz megerősítést vár minden egyes átnevezés előtt.

A „-r” opció hatására az argumentumokban megadott könyvtárakba belelép és rekurzív módon az azon belüli fájlokat és alkönyvtárakat is átnevezi. Ennek elhagyása esetén csak magát a megadott könyvtárat nevezi át.

A parancsot először mindig a „--notest” kapcsoló nélkül futtassuk, ekkor a program kiírja, hogy mit tenne, de azt nem teszi meg. Ha a kimenettel elégedettek vagyunk, akkor hajtsuk végre újra a parancsot, immár a „--notest” kapcsolót is megadva, ez fogja elvégezni a tényleges átnevezést.

A convmv beépített intelligenciával rendelkezik, nem nevezi át azokat a fájlokat, melyek neve már érvényes UTF-8 sztring. Ily módon bátran ráereszthető vegyesen Latin-2 és UTF-8 fájlneveket tartalmazó könyvtárstruktúrára, az eredmény egységes UTF-8 kódolás lesz.

CD-n lévő ékezetes fájlnevek

Az adat CD-ken és DVD-ken használatos fájlrendszer (ISO 9660) eredeti változata mindössze a DOS-ra emlékeztető 8.3-as hosszúságú ASCII fájlneveket tett lehetővé. Később többfajta kiterjesztéssel bővítették a formátumot, ezek közül általában a Linux világra jellemző Rock Ridge, valamint a Windows világ által favorizált Joliet kiterjesztéssel találkozhatunk a gyakorlatban. Egy lemezen akár mindkét kiterjesztés is jelen lehet, de a Linux egyszerre csak az egyiket tudja használni.

A Rock Ridge kiterjesztésben a hosszú fájlnevek a Linux filozófiáját követve egy meg nem nevezett ASCII-kompatibilis karakterkészletben állnak. Ez praktikusan magyar fájlnevek esetén a régebben készült CD-k esetén valószínűleg ISO-8859-2, míg az újabban írt CD-k esetén valószínűleg UTF-8 kódolást jelent. Sajnos ha egy CD-n ISO-8859-2 karakterkészletben állnak a Rock Ridge fájlnevek, akkor azt nem lehetséges futási időben UTF-8 kódolásúvá alakítani, vagyis a fájlnevek nem fognak helyesen megjelenni.

A Joliet kiterjesztésben a Windows filozófiájához igazodva a fájlnevek mindenképpen egy rögzített, Unicode alapú kódolástban (UTF-16) állnak (csakúgy, mint VFAT és NTFS fájlrendszereken). Ezek a fájlnevek tehát a régen kiírt CD-ken éppúgy helyesek kell hogy legyenek, mint az újonnan írtakon. A Linux kernel a háttérben automatikusan elvégzi az átalakítást ez a karakterkészlet és az UTF-8 között, így régi és új CD-inken egyaránt jól kell hogy látszódjanak a fájlnevek, amennyiben a Joliet kiterjesztés van használatban.

Ha egy CD-n mindkét kiterjesztés megtalálható, akkor a Linux kernel a Rock Ridge-et használja, mivel csak ez nyújt lehetőséget a Unix fájlattribútumok (tulajdonos, futtatási jog stb.) tárolására. Ha a helyesen megjelenő ékezet fontosabb számunkra, a CD-t csatoljuk a „norock” mount-opcióval, ekkor a kernel a Joliet kiterjesztésből fogja venni a fájlnevet.

Fájlok tartalmának átalakítása

A grafikus fájlszerkesztők (például gedit) általában lehetőséget nyújtanak arra, hogy fájl beolvasásakor, valamint elmentésekor megadjuk a karakterkészletet. Indítsuk el például a gedit-et, majd a Fájl -> Megnyitás menüpont alatt válasszuk ki a fájlt és annak régi karakterkészletét.

VIGYÁZAT! Lehetőség szerint ne az Automatikus felismerést válasszuk. Ez az opció képes ugyan megtippelni, hogy a fájl kódolása UTF-8 vagy sem, viszont ha nem az, akkor esélye sincs azt megmondani, hogy Latin-1 vagy pedig Latin-2, és Latin-1-re fog tippelni. Ennek az lesz az eredménye, hogy magyar ő és ű betűk helyett hullámos õ és kalapos û betűk fognak a fájlban szerepelni.

A megnyitás után a Fájl -> Mentés másként menüpont segítségével mentsük el korábbi nevén, UTF-8 kódolást kiválasztva.

Parancssoros átalakításhoz az iconv vagy a recode program használható. Pár példa használatukra:

Ha a forrás vagy cél karakterkészletet elhagyjuk, akkor mindkét program a rendszer aktuális karakterkészletét képzeli oda. Így az UHU-Linux alapértelmezett UTF-8 beállításának használata esetén a fenti parancsok tovább egyszerűsíthetők:

Az iconv nem képes helyben átalakítani a fájlt, a recode viszont igen, ezért ha gyors megoldásra van szükség, általában a recode az egyszerűbb. Ugyanakkor ha maradandóbb megoldást alkotunk (például szkriptet írunk), ajánlottabb az iconv használata, mivel az standardabb eszköz, több rendszeren található meg, mint a recode.

A convmv-vel ellentétben a fenti két program egyike sem képes csak a nem érvényes UTF-8 fájlokon elvégezni az átalakítást. Ha erre van szükségünk (például tömegesen kívánunk vegyesen Latin-2 és UTF-8 kódolású fájlokat egységesen UTF-8 kódolásúra hozni), akkor például az iconv paranccsal végeztethetünk egy UTF-8 -> UTF-8 próba átalakítást. Ha ez sikeres volt, akkor a fájl már érvényes UTF-8 kódolású, ellenkező esetben nem az. Íme egy egyszerű példa egy ilyen szkriptre, amely az argumentumban megadott fájlneveket feltételesen alakítja át Latin-2-ről UTF-8-ra:

#!/bin/sh
for i; do
	if ! iconv -f UTF-8 -t UTF-8 <"$i" >/dev/null 2>&1; then
		iconv -f Latin2 -t UTF-8 <"$i" >"$i.tmp" && mv "$i.tmp" "$i"
	fi
done

Honlapok

Amennyiben HTML fájljainkat átalakítjuk, a fejlécben megnevezett karakterkészletet is át kell írni, vagy ha ilyen még nem szerepelne, akkor itt az ideje hogy felvegyük:

<head>
	...
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
	...
</head>

Sajnos azonban a web szerver a HTTP fejlécben is megnevezhet karakterkészletet, és ha így tesz, akkor az a karakterkészlet felülbírálja a html fájlban szereplőt.

Az apache web szerver konfigurációs fájljában az AddDefaultCharset direktívát tegyük inaktívvá, vagy állítsuk „UTF-8”-ra az értékét, avagy a kiszolgált fájlok könyvtára (például ~/public_html) alatt hozzunk létre egy .htaccess fájlt ezzel a tartalommal:

AddDefaultCharset UTF-8

Ennek a megközelítésnek nagy előnye, hogy nemcsak a html fájlokra, hanem minden egyébre (például sima szöveges .txt fájlok, könyvtár tartalmának kilistázása) is vonatkozni fog, így a túlsó fél böngészője ezeket is helyesen UTF-8-ként fogja értelmezni.

Ha oldalainkat PHP szkript generálja, a megfelelő HTTP fejlécről egy

header("Content-Type: text/html; charset=UTF-8");
függvényhívás gondoskodhat. Ezt a függvényt még az előtt kell meghívni, hogy a php kód bármit is elkezdene kiírni a honlap (html fájl) részeként.

Fontos lehet tudni, hogy az átalakítást követően a form-ok adatait is UTF-8 kódolásban fogjuk megkapni a távoli fél böngészőjétől.

LaTeX fájlok

LaTeX (.tex) fájljainkban is használhatunk UTF-8 ékezetkódolást, ehhez mindössze az inputenc csomagot kell betöltenünk utf8 argumentummal a dokumentum fejlécében:

\documentclass[...]{...}
...
\usepackage[utf8]{inputenc}
...
\begin{document}
...

Előző Főoldal Következő