.\" -*- coding: UTF-8 -*-
.\" Copyright (C) Markus Kuhn, 1996, 2001
.\"
.\" SPDX-License-Identifier: GPL-2.0-or-later
.\"
.\" 1995-11-26  Markus Kuhn <mskuhn@cip.informatik.uni-erlangen.de>
.\"      First version written
.\" 2001-05-11  Markus Kuhn <mgk25@cl.cam.ac.uk>
.\"      Update
.\"
.\"*******************************************************************
.\"
.\" This file was generated with po4a. Translate the source file.
.\"
.\"*******************************************************************
.TH UTF\-8 7 "15 czerwca 2024 r." "Linux man\-pages 6.9.1" 
.SH NAZWA
UTF\-8 \- zgodne z ASCII wielobajtowe kodowanie Unikodowe
.SH OPIS
Zestaw znaków \fBUnicode 3.0\fP zajmuje szesnastobitową przestrzeń
kodową. Najprostsze kodowanie Unikodowe (znane jako \fBUCS\-2\fP)  składa się z
sekwencji słów szesnastobitowych. Takie łańcuchy mogą zawierać jako część
wielu znaków 16\-bitowych bajty takie jak \[Bq]\[rs]0\[rq] lub \[Bq]/\[rq],
które mają specjalne znaczenie w nazwach plików i innych parametrach funkcji
z biblioteki C. Dodatkowo, większość narzędzi uniksowych spodziewa się
plików ASCII i nie potrafi bez znacznych modyfikacji czytać słów 16\-bitowych
jako znaków. Z tych powodów \fBUCS\-2\fP nie jest pożądanym zewnętrznym
kodowaniem \fBUnicode\fP w nazwach plików, plikach tekstowych, zmiennych
środowiskowych itd. \fBISO/IEC 10646 Universal Character Set (UCS)\fP, nadzbiór
Unicode, zajmuje nawet przestrzeń 31\-bitową i oczywiste dlań kodowanie
\fBUCS\-4\fP (sekwencja słów 32\-bitowych) stwarza te same problemy.
.P
Kodowanie \fBUTF\-8\fP dla \fBUnicode\fP i \fBUCS\fP nie ma tych problemów i jest
słuszną metodą używania zestawu znaków \fBUnicode\fP w systemach operacyjnych
wzorowanych na UNIX\-ie.
.SS WŁAŚCIWOŚCI
Kodowanie \fBUTF\-8\fP ma następujące przydatne właściwości:
.IP \[bu] 3
\fBUCS\fP znaki od 0x00000000 do 0x0000007f (klasyczne znaki \fBUS\-ASCII\fP)
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 \fBASCII\fP i w \fBUTF\-8\fP.
.IP \[bu]
Wszystkie znaki \fBUCS\fP > 0x7f zakodowane są jako wielobajtowy ciąg
składający się tylko z bajtów w zakresie 0x80 do 0xfd, tak więc żadne bajty
ASCII nie mogą się pojawić jako część innego znaku i nie występują tam
problemy z np.  \[Bq]\[rs]0\[rq] czy \[Bq]/\[rq].
.IP \[bu]
Zachowany jest leksykograficzny porządek sortowania łańcuchów w \fBUCS\-4\fP.
.IP \[bu]
Za pomocą \fBUTF\-8\fP można zakodować wszystkie z możliwych 2\[ha]31 kodów UCS.
.IP \[bu]
Bajty 0xc0, 0xc1, 0xfe i 0xff nie są nigdy używane w kodowaniu \fBUTF\-8\fP.
.IP \[bu]
Pierwszy bajt ciągu wielobajtowego reprezentującego pojedynczy znak \fBUCS\fP
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.
.IP \[bu]
Znaki \fBUCS\fP zakodowane w \fBUTF\-8\fP mogą mieć długość do sześciu bajtów,
jakkolwiek standard \fBUnicode\fP nie definiuje znaków powyżej 0x10ffff, więc
znaki Unicode mogą mieć maksymalnie cztery bajty w \fBUTF\-8\fP.
.SS 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:
.TP 
0x00000000 \- 0x0000007F:
0\fIxxxxxxx\fP
.TP 
0x00000080 \- 0x000007FF:
110\fIxxxxx\fP 10\fIxxxxxx\fP
.TP 
0x00000800 \- 0x0000FFFF:
1110\fIxxxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP
.TP 
0x00010000 \- 0x001FFFFF:
11110\fIxxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP
.TP 
0x00200000 \- 0x03FFFFFF:
111110\fIxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP
.TP 
0x04000000 \- 0x7FFFFFFF:
1111110\fIx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP 10\fIxxxxxx\fP
.P
Pozycje bitowe \fIxxx\fP zostają wypełnione bitami numeru kodu znaku w
reprezentacji dwójkowej, zaczynając od bitu najbardziej znaczącego
(bit\-endian).  Może zostać użyty tylko najkrótszy możliwy wielobajtowy ciąg,
która reprezentuje numer kodowy danego znaku.
.P
Wartości kodowe \fBUCS\fP 0xd800\[en]0xdfff (zastępujące UTF\-16), jak też
0xfffe i 0xffff (nie\-znaki w UCS) nie powinny wystąpić w strumieniach
zgodnych z \fBUTF\-8\fP. Zgodnie z RFC 3629 nie powinien być wykorzystywany
żaden punkt powyżej U+10FFFF, co ogranicza znaki do czterech bajtów.
.SS PRZYKŁADY
Znak \fBUnicode\fP 0xa9 = 1010 1001 (znak copyright) kodowany jest w UTF\-8 jako
.P
.RS
11000010 10101001 = 0xc2 0xa9
.RE
.P
a znak 0x2260 = 0010 0010 0110 0000 (symbol \[Bq]nie równa się\[rq])
kodowany jest jako:
.P
.RS
11100010 10001001 10100000 = 0xe2 0x89 0xa0
.RE
.SS "Uwagi o stosowaniu"
Aby włączyć obsługę locale \fBUTF\-8\fP użytkownicy muszą wybrać na przykład
.P
.RS
export LANG=pl_PL.UTF\-8
.RE
.P
aby aktywować obsługę \fBUTF\-8\fP w aplikacjach.
.P
Oprogramowanie, które musi wiedzieć, jakie kodowanie znaków jest używane
powinno zawsze ustawiać locale, na przykład za pomocą
.P
.RS
setlocale(LC_CTYPE, "")
.RE
.P
a programiści mogą wówczas sprawdzać wartość wyrażenia
.P
.RS
strcmp(nl_langinfo(CODESET), "UTF\-8") == 0
.RE
.P
aby określić, czy zostało wybrane locale \fBUTF\-8\fP i czy wszystko:
standardowe wprowadzanie i wyprowadzanie danych otwartym tekstem,
komunikacja terminalowa, zawartość plików tekstowych oraz zmienne
środowiska, jest zakodowane w \fBUTF\-8\fP.
.P
Programiści przyzwyczajeni do jednobajtowego kodowania takiego, jak
\fBUS\-ASCII\fP lub \fBISO/IEC\ 8859 8859\fP muszą wiedzieć, że dwa z
dotychczasowych założeń nie są spełnione w locale \fBUTF\-8\fP. Po pierwsze,
pojedynczy bajt niekoniecznie nadal odpowiada pojedynczemu znakowi. Po
drugie, ponieważ nowoczesne emulatory terminali w trybie \fBUTF\-8\fP wspierają
również chińskie, japońskie i koreańskie \fBznaki o podwójnej długości\fP, jak
też nie rozdzielone \fBznaki kombinowane\fP, wyprowadzenie pojedynczego znaku
niekoniecznie przesuwa kursor o jedną pozycję, jak to miało miejsce w
\fBASCII\fP.  Do zliczania znaków i pozycji kursora należy obecnie używać
funkcji bibliotecznych takich, jak \fBmbsrtowcs\fP(3) i \fBwcswidth\fP(3).
.P
Oficjalną sekwencją unikową przełączającą ze schematu kodowania \fBISO/IEC\ 2022\fP (używaną na przykład przez terminale VT100) do \fBUTF\-8\fP jest ESC % G
("\[rs]x1b%G").  Odpowiadającą jej sekwencją powrotu z \fBUTF\-8\fP do ISO/IEC\ 2022 jest ESC % @ ("\[rs]x1b%@"). Inne sekwencje ISO/IEC\ 2022 (takie jak
przełączające zbiory G0 i G1) nie mają zastosowania w trybie UTF\-8.
.SS BEZPIECZEŃSTWO
Standardy \fBUnicode\fP i \fBUCS\fP wymagają, aby przy generowaniu \fBUTF\-8\fP używać
najkrótszej z możliwych postaci, np. generowanie dwubajtowej sekwencji o
pierwszym bajcie 0xc0 nie jest zgodne ze standardem.  \fBUnicode 3.1\fP 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 \fBASCII\fP wystąpień \[Bq]/../\[rq], \[Bq];\[rq] lub NUL i przeoczyć,
że jest wiele niezgodnych z \fBASCII\fP sposobów przedstawienia tych rzeczy w
nienajkrótszym kodowaniu \fBUTF\-8\fP.
.SS STANDARDY
.\" .SH AUTHOR
.\" Markus Kuhn <mgk25@cl.cam.ac.uk>
ISO/IEC 10646\-1:2000, Unicode 3.1, RFC\ 3629, Plan 9.
.SH "ZOBACZ TAKŻE"
\fBlocale\fP(1), \fBnl_langinfo\fP(3), \fBsetlocale\fP(3), \fBcharsets\fP(7),
\fBunicode\fP(7)
.PP
.SH TŁUMACZENIE
Tłumaczenie niniejszej strony podręcznika:
Gwidon S. Naskrent <naskrent@hoth.amu.edu.pl>,
Andrzej Krzysztofowicz <ankry@green.mf.pg.gda.pl>
i
Michał Kułach <michal.kulach@gmail.com>
.
.PP
Niniejsze tłumaczenie jest wolną dokumentacją. Bliższe informacje o warunkach
licencji można uzyskać zapoznając się z
.UR https://www.gnu.org/licenses/gpl-3.0.html
GNU General Public License w wersji 3
.UE
lub nowszej. Nie przyjmuje się ŻADNEJ ODPOWIEDZIALNOŚCI.
.PP
Błędy w tłumaczeniu strony podręcznika prosimy zgłaszać na adres listy
dyskusyjnej
.MT manpages-pl-list@lists.sourceforge.net
.ME .
