Provided by: manpages-pl_4.21.0-2_all bug

NAZWA

       UTF-8 - zgodne z ASCII wielobajtowe kodowanie Unikodowe

OPIS

       The  Unicode  3.0  character  set  occupies a 16-bit code space.  The most obvious Unicode
       encoding (known as UCS-2)  consists of a sequence  of  16-bit  words.   Such  strings  can
       contain—as  part of many 16-bit characters—bytes such as '\0' or '/', which have a special
       meaning in filenames and other C library function arguments.  In addition, the majority of
       UNIX  tools  expect  ASCII  files  and can't read 16-bit words as characters without major
       modifications.  For these reasons, UCS-2 is not a suitable external encoding of Unicode in
       filenames,  text  files,  environment  variables,  and  so  on.   The  ISO 10646 Universal
       Character Set (UCS), a superset of Unicode, occupies an even larger code space—31 bits—and
       the obvious UCS-4 encoding for it (a sequence of 32-bit words) has the same problems.

       Kodowanie  UTF-8  dla  Unicode  i UCS nie ma tych problemów i jest słuszną metodą używania
       zestawu znaków Unicode w systemach operacyjnych wzorowanych na UNIX-ie.

   WŁAŚCIWOŚCI
       Kodowanie UTF-8 ma następujące przydatne właściwości:

       * UCS znaki od 0x00000000 do 0x0000007f (klasyczne znaki US-ASCII) zakodowane są po prostu
         jako  bajty  0x00  do  0x7f  (zgodność  z  ASCII). Oznacza to, że pliki i łańcuchy które
         zawierają tylko siedmiobitowe znaki ASCII mają takie samo kodowanie i w ASCII i w UTF-8.

       * All UCS characters greater than 0x7f are encoded as a multibyte sequence consisting only
         of  bytes  in  the  range  0x80  to 0xfd, so no ASCII byte can appear as part of another
         character and there are no problems with, for example, '\0' or '/'.

       * Zachowany jest leksykograficzny porządek sortowania łańcuchów w UCS-4.

       * All possible 2^31 UCS codes can be encoded using UTF-8.

       * Bajty 0xc0, 0xc1, 0xfe i 0xff nie są nigdy używane w kodowaniu UTF-8.

       * Pierwszy bajt ciągu wielobajtowego reprezentującego pojedynczy znak UCS nie-ASCII zawsze
         zawiera  się  w  zakresie  0xc2  do  0xfd  i  wskazuje jak długi jest ów ciąg. Wszystkie
         pozostałe bajty takiego wielobajtowego ciągu zawierają się w zakresie od 0x80  do  0xbf.
         Pozwala  to  na  łatwą resynchronizację i sprawia, że kodowanie jest niezależne od stanu
         [systemu] oraz odporne na brakujące bajty.

       * Znaki UCS zakodowane w UTF-8 mogą mieć długość do sześciu  bajtów,  jakkolwiek  standard
         Unicode  nie definiuje znaków powyżej 0x10ffff, więc znaki Unicode mogą mieć maksymalnie
         cztery bajty w UTF-8.

   KODOWANIE
       Do reprezentacji znaku używane są następujące ciągi  bajtów.  Ciąg,  którego  należy  użyć
       zależy od numeru kodu UCS znaku:

       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

       The  xxx  bit  positions  are  filled with the bits of the character code number in binary
       representation, most significant bit  first  (big-endian).   Only  the  shortest  possible
       multibyte sequence which can represent the code number of the character can be used.

       The  UCS  code  values 0xd800–0xdfff (UTF-16 surrogates) as well as 0xfffe and 0xffff (UCS
       noncharacters) should not appear in conforming UTF-8 streams.  According to  RFC  3629  no
       point above U+10FFFF should be used, which limits characters to four bytes.

   PRZYKŁADY
       Znak Unicode 0xa9 = 1010 1001 (znak copyright) kodowany jest w UTF-8 jako

              11000010 10101001 = 0xc2 0xa9

       a znak 0x2260 = 0010 0010 0110 0000 (symbol "nie równa się") kodowany jest jako:

              11100010 10001001 10100000 = 0xe2 0x89 0xa0

   Uwagi o stosowaniu
       Aby włączyć obsługę locale UTF-8 użytkownicy muszą wybrać na przykład

              export LANG=pl_PL.UTF-8

       aby aktywować obsługę UTF-8 w aplikacjach.

       Oprogramowanie,  które  musi  wiedzieć, jakie kodowanie znaków jest używane powinno zawsze
       ustawiać locale, na przykład za pomocą

              setlocale(LC_CTYPE, "")

       a programiści mogą wówczas sprawdzać wartość wyrażenia

              strcmp(nl_langinfo(CODESET), "UTF-8") == 0

       to determine whether a UTF-8 locale has been selected and whether therefore all  plaintext
       standard  input and output, terminal communication, plaintext file content, filenames, and
       environment variables are encoded in UTF-8.

       Programiści przyzwyczajeni do jednobajtowego kodowania takiego, jak US-ASCII lub ISO  8859
       muszą  wiedzieć,  że  dwa  z  dotychczasowych  założeń nie są spełnione w locale UTF-8. Po
       pierwsze, pojedynczy bajt niekoniecznie nadal odpowiada pojedynczemu znakowi.  Po  drugie,
       ponieważ  nowoczesne  emulatory  terminali  w  trybie  UTF-8  wspierają  również chińskie,
       japońskie i  koreańskie  znaki  o  podwójnej  długości,  jak  też  nie  rozdzielone  znaki
       kombinowane,  wyprowadzenie  pojedynczego  znaku  niekoniecznie  przesuwa  kursor  o jedną
       pozycję, jak to miało miejsce w ASCII.  Do  zliczania  znaków  i  pozycji  kursora  należy
       obecnie używać funkcji bibliotecznych takich, jak mbsrtowcs(3) i wcswidth(3).

       Oficjalną  sekwencją  unikową  przełączającą  ze  schematu  kodowania ISO 2022 (używaną na
       przykład przez terminale VT100) do UTF-8 jest  ESC  %  G  ("\x1b%G").   Odpowiadającą  jej
       sekwencją  powrotu  z  UTF-8  do ISO 2022 jest ESC % @ ("\x1b%@"). Inne sekwencje ISO 2022
       (takie jak przełączające zbiory G0 i G1) nie mają zastosowania w trybie UTF-8.

   BEZPIECZEŃSTWO
       Standardy Unicode i  UCS  wymagają,  aby  przy  generowaniu  UTF-8  używać  najkrótszej  z
       możliwych  postaci, np. generowanie dwubajtowej sekwencji o pierwszym bajcie 0xc0 nie jest
       zgodne ze standardem.  Unicode 3.1 dodał wymaganie, aby zgodne ze standardem programy  nie
       akceptowały innych niż najkrótsze postaci jako swoich danych wejściowych. Jest to związane
       z bezpieczeństwem: jeśli wprowadzane  przez  użytkownika  dane  są  sprawdzane  pod  kątem
       możliwych  naruszeń  bezpieczeństwa, program może sprawdzać jedynie wersje ASCII wystąpień
       "/../", ";" lub NUL i przeoczyć, że jest wiele niezgodnych z ASCII sposobów przedstawienia
       tych rzeczy w nienajkrótszym kodowaniu UTF-8.

   STANDARDY
       ISO/IEC 10646-1:2000, Unicode 3.1, RFC 3629, Plan 9.

ZOBACZ TAKŻE

       locale(1), nl_langinfo(3), setlocale(3), charsets(7), unicode(7)

TŁUMACZENIE

       Autorami  polskiego  tłumaczenia  niniejszej  strony  podręcznika  są:  Gwidon S. Naskrent
       <naskrent@hoth.amu.edu.pl>, Andrzej  Krzysztofowicz  <ankry@green.mf.pg.gda.pl>  i  Michał
       Kułach <michal.kulach@gmail.com>

       Niniejsze  tłumaczenie  jest  wolną  dokumentacją. Bliższe informacje o warunkach licencji
       można   uzyskać   zapoznając   się   z   GNU   General   Public   License   w   wersji   3
       ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩   lub   nowszej.   Nie  przyjmuje  się  ŻADNEJ
       ODPOWIEDZIALNOŚCI.

       Błędy w tłumaczeniu  strony  podręcznika  prosimy  zgłaszać  na  adres  listy  dyskusyjnej
       ⟨manpages-pl-list@lists.sourceforge.net⟩.