.\" -*- 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 "12 marca 2023 r." "Linux man\-pages 6.05.01" 
.SH NAZWA
UTF\-8 \- zgodne z ASCII wielobajtowe kodowanie Unikodowe
.SH 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\[em]as part of many 16\-bit
characters\[em]bytes such as \[aq]\e0\[aq] or \[aq]/\[aq], 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/IEC 10646 Universal
Character Set (UCS), a superset of Unicode, occupies an even larger code
space\[em]31\ bits\[em]and the obvious UCS\-4 encoding for it (a sequence of
32\-bit words) has the same problems.
.PP
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:
.TP  0.2i
*
\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.
.TP 
*
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, \[aq]\e0\[aq] or \[aq]/\[aq].
.TP 
*
Zachowany jest leksykograficzny porządek sortowania łańcuchów w \fBUCS\-4\fP.
.TP 
*
All possible 2\[ha]31 UCS codes can be encoded using UTF\-8.
.TP 
*
Bajty 0xc0, 0xc1, 0xfe i 0xff nie są nigdy używane w kodowaniu \fBUTF\-8\fP.
.TP 
*
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.
.TP 
*
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  0.4i
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
.PP
The \fIxxx\fP 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.
.PP
The UCS code values 0xd800\[en]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.
.SS PRZYKŁADY
Znak \fBUnicode\fP 0xa9 = 1010 1001 (znak copyright) kodowany jest w UTF\-8 jako
.PP
.RS
11000010 10101001 = 0xc2 0xa9
.RE
.PP
a znak 0x2260 = 0010 0010 0110 0000 (symbol "nie równa się") kodowany jest
jako:
.PP
.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
.PP
.RS
export LANG=pl_PL.UTF\-8
.RE
.PP
aby aktywować obsługę \fBUTF\-8\fP w aplikacjach.
.PP
Oprogramowanie, które musi wiedzieć, jakie kodowanie znaków jest używane
powinno zawsze ustawiać locale, na przykład za pomocą
.PP
.RS
setlocale(LC_CTYPE, "")
.RE
.PP
a programiści mogą wówczas sprawdzać wartość wyrażenia
.PP
.RS
strcmp(nl_langinfo(CODESET), "UTF\-8") == 0
.RE
.PP
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.
.PP
Programiści przyzwyczajeni do jednobajtowego kodowania takiego, jak
\fBUS\-ASCII\fP lub \fBISO 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).
.PP
Oficjalną sekwencją unikową przełączającą ze schematu kodowania \fBISO 2022\fP
(używaną na przykład przez terminale VT100) do \fBUTF\-8\fP jest ESC % G
("\ex1b%G").  Odpowiadającą jej sekwencją powrotu z \fBUTF\-8\fP do ISO 2022
jest ESC % @ ("\ex1b%@"). Inne sekwencje ISO 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ń "/../", ";" 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
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>
.
.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 .
