Provided by: manpages-hu_20010119-5_all bug

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>