utf-8

UTF-8(7)                    Linux Programmer's Manual                   UTF-8(7)



NÉV
       UTF-8 - ASCII kompatíbilis több bájtos Unicode kódolás

LEÍRÁS
       Az Unicode karakterkészlet 16 bites kódteret foglal el. A legkézenfekvőbb
       Unicode kódolás (az UCS-2) 16 bites szavak sorozatából áll. Az ilyen
       karakterláncok olyan bájtokat is tartalmazhatnak egyes 16 bites
       karakterek részeként, mint a '\0' vagy a '/', amelyeknek speciális
       jelentésük van fájlnevekben és különféle C könyvtári függvények
       paramétereiben. Ráadásul a UNIX-os segédprogramok többsége ASCII fájlokat
       vár, és nem tudja a 16 bites szavakat karakterként feldolgozni jelentős
       módosítások nélkül. Ezért az UCS-2 nem megfelelő az Unicode kódolására
       fájlnevekben, szövegfájlokban, környezeti változókban, stb. Az ISO 10646
       Universal Character Set (UCS), amely tartalmazza részhalmazként az
       Unicode-ot, már 31 bites kódtéren helyezkedik el, és a kézenfekvő UCS-4
       kódolás (32 bites szavak sorozata) erre a karakterkészletre ugyanezeket a
       problémákat veti fel.

       Az Unicode és az UCS UTF-8 típusú kódolása mentes ezektől a problémáktól,
       ezért ez a követendő út a Unicode karakterkészlet használatára a Unix-
       szerű operációs rendszerek alatt.

TULAJDONSÁGOK
       Az UTF-8 kódolás a következő jó tulajdonságokkal rendelkezik:

       * Az 0x00000000-tól 0x0000007f-ig terjedő UCS karakterek (a klasszikus
         US-ASCII karakterek) egyszerűen a 0x00-tól 0x7f-ig egy bájton
         tárolódnak.  (ASCII kompatibilitás.) Ez azt jelenti, hogy ha egy
         fájlban vagy karakterláncban csak 7 bites ASCII karakterek fordulnak
         elő, akkor a kódolásuk ASCIIésUTF-8 alatt azonos lesz.

       * Minden 0x7f-nél nagyobb kódú UCS karaktert olyan több bájtból álló
         sorozat kódol, amelyben minden bájt 0x80 és 0xfd közé esik, tehát nem
         jelenhet meg egy ASCII bájt, mint egy másik karakter része, ezért nem
         okozhat problémát például a '\0' vagy a  '/'.

       * Az UCS-4 karakterláncok ábécérendje megmarad.

       * A 2^31 darab lehetséges kód bármelyike megadható az UTF-8segítségével.

       * A 0xfe és 0xff bájtokat nem használja az UTF-8 kódolás.

       * Egy nem-ASCII UCS karaktert reprezentáló több bájtos sorozat első
         bájtja mindig 0xc0 és 0xfd közé esik, és egyben megadja, hogy milyen
         hosszú a több bájtos sorozat.  Az ezt követő bájtok valamennyien a
         0x80-tól 0xbf-ig terjedő tartományba esnek.  Ez lehetővé teszi az
         újraszinkronizálást, és a kódolást ellenállóvá teszi a hiányzó
         bájtokkal szemben.

       * Az UTF-8 kódolású UCS karakterek akár hat bájlt hosszúak is lehetnek,
         de a Unicode karakterek csak legfeljebb három bájt hosszúak. Mivel a
         Linux csak a 16 bites Unicode részhalmazát használja az UCS-nek, ezért
         Linux alatt az UTF-8 több bájtos sorozatok csak egy, két vagy három
         bájt hosszúak lehetnek.

KÓDOLÁS
       A következő bájtsorozatok reprezentálnak egy karaktert. A használandó
       sorozat függ a karakter UCS kódjától.

       0x00000000 - 0x0000007F:
           0xxxxxxx

       0x00000080 - 0x000007FF:
           110xxxxx 10xxxxxx

       0x00000800 - 0x0000FFFF:
           1110xxxx 10xxxxxx 10xxxxxx

       0x00010000 - 0x001FFFFF:
           11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

       0x00200000 - 0x03FFFFFF:
           111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

       0x04000000 - 0x7FFFFFFF:
           1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx

       Az xxx bitpozíciókat azokkal a bitekkel kell feltölteni, amelyek a
       karakter kódját alkotják kettes számrendszerbeli reprezentációban. Csak a
       legrövidebb több bájtos reprezentációt szabad használni a több lehetséges
       variáció közül.

PÉLDÁK
       A Unicode-os 0xa9 = 1010 1001 karakter (a copyright jel) UTF-8-as
       kódolása:

              11000010 10101001 = 0xc2 0xa9

       A 0x2260 = 0010 0010 0110 0000 karakter (a "nem egyenlő" szimbólum)
       kódolása:

              11100010 10001001 10100000 = 0xe2 0x89 0xa0

BIZTONSÁG
       Az Unicode specifikáció megköveteli, hogy az UTF-8 kódokat előállítók a
       legrövidebb lehetséges formát válasszák, például egy olyan kétbájtos
       sorozat, amelynek az első bájtja 0xc0, nem szabályos.  Az Unicode kiadta
       az UTF-8 Corrigendum című dokumentumot, amelyben megtiltja a szabványt
       betartó programoknak, hogy elfogadjanak olyan kódokat, amelyek nem a
       legrövidebb formájukban érkeznek. Ennek biztonsági okai vannak: ha a
       felhasználó által beadott kódsorozatot ellenőrzik a biztonság érdekében,
       az ellenőrzés valószínűleg az "/../", ";" vagy NUL értékek ASCII
       formátumára terjedne csak ki, és esetleg nem gondolnak arra, hogy számos
       más módon lehet ezeket a jeleket az UTF-8 kódolás segítségével nem ASCII
       formátumban reprezentálni. Lásd még az IETF RFC 2279-et.

       Néhány rendszer (amelyek a NUL-t a karakterlánc végeként értelmezik)
       ennek ellenére használja a C0 80 kódot a NUL (ASCII 00) karakter belső
       ábrázolására.

SZABVÁNYOK
       ISO 10646, Unicode 1.1, XPG4, Plan 9.

SZERZŐ
       Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>

LÁSD MÉG
       unicode(7)

MAGYAR FORDÍTÁS
       Tímár András <timar_a@freemail.hu>



Linux                              1995-11-26                           UTF-8(7)