unicode(7)

NAZWA
unicode - zunifikowany zestaw znaków

OPIS
The international standard ISO/IEC 10646 defines the Universal Character Set (UCS). UCS contains all characters of all other character set standards. It also guarantees "round-trip compatibility"; in other words, conversion tables can be built such that no information is lost when a string is converted from any other encoding to UCS and back.

UCS zawiera znaki wymagane do przedstawienia praktycznie wszystkich znanych języków. Obejmuje to nie tylko pismo łacińskie, greckie, hebrajskie, arabskie, armeńskie, gruzińskie i cyrylicę, lecz także ideogramy chińskie, japońskie oraz koreańskie Han, jak również następujące: hiragana, katakana, hangul, dewanagari, bengalskie, gurmukji, gujarati, oriya, tamil, telugu, kannada, malajlamski, tajski, lao, kmerski, bopomofo, tybetański, runiczne, etiopskie, kanadyjskie sylabiczne, cherokee, mongolskie, oghamskie, myanmar, sinhala, thaana, yi i inne. Nad pismami, które nie zostały jeszcze uwzględnione, trwają prace nad najlepszym ich zakodowaniem do użytku komputerowego i ostatecznie zostaną one dodane. Ujęte mogą zostać w końcu nie tylko hieroglify i różne, historyczne języki indoeuropejskie, lecz także wybrane pisma artystyczne, jak tengwar, cirth i klingoński. UCS obejmuje również wiele symboli graficznych, typograficznych, matematycznych i naukowych, dostarczanych z TeX-em, PostScriptem, APL-em, MS-DOS-em, Macintoshem oraz fontami OCR i wieloma innymi systemami przetwarzania tekstów, a wciąż dodawane są nowe.

The UCS standard (ISO/IEC 10646) describes a 31-bit character set architecture consisting of 128 24-bit groups, each divided into 256 16-bit planes made up of 256 8-bit rows with 256 column positions, one for each character. Part 1 of the standard (ISO/IEC 10646-1) defines the first 65534 code positions (0x0000 to 0xfffd), which form the Basic Multilingual Plane (BMP), that is plane 0 in group 0. Part 2 of the standard (ISO/IEC 10646-2) adds characters to group 0 outside the BMP in several supplementary planes in the range 0x10000 to 0x10ffff. There are no plans to add characters beyond 0x10ffff to the standard, therefore of the entire code space, only a small fraction of group 0 will ever be actually used in the foreseeable future. The BMP contains all characters found in the commonly used other character sets. The supplemental planes added by ISO/IEC 10646-2 cover only more exotic characters for special scientific, dictionary printing, publishing industry, higher-level protocol and enthusiast needs.

Reprezentacja każdego znaku UCS jako 2-bajtowe słowo jest nazywana postacią UCS-2 (tylko znaki BMP), podczas gdy UCS-4 jest reprezentacją każdego znaku jako słowo 4-bajtowe. Dodatkowo, istnieją dwie postacie kodowania: UTF-8 w celu kompatybilności wstecznej z programami przetwarzającymi ASCII i UTF-16, w celu kompatybilnej obsługi znaków spoza BMP - aż do 0x10ffff, przez programy UCS-2.

Znaki UCS 0x0000 do 0x007f są identyczne z tymi w klasycznym zestawie znaków US-ASCII, a znaki w zakresie 0x000 do 0x00ff są identyczne z tymi w zestawie znaków ISO 8859-1 Latin-1.

  Znaki składające
Niektóre punkty kodowe w UCS zostały przypisane do znaków składających. Podobne są one do niespacyjnych klawiszy akcentów na maszynie do pisania. Znak składający dodaje akcent do poprzedniego znaku. Najważniejsze znaki akcentowane mają osobne kody w UCS, jednak mechanizm znaków składających pozwala dodawać akcenty i inne znaki diakrytyczne do każdego znaku. Znaki składające zawsze następują po znaku, który modyfikują. Dla przykładu, niemiecki znak A-umlaut ("Latin capital letter A with diaeresis") może być przedstawiony za pomocą bądź to istniejącego już złożonego znaku UCS o kodzie 0x00c4, bądź alternatywnie jako kombinacja zwykłych znaków "Latin capital letter A" i "combining diaeresis": 0x0041 0x0308.

Znaki składające są istotne na przykład do kodowania pisma tajskiego lub do składu zapisu matematycznego oraz użytkowników międzynarodowego alfabetu fonetycznego (IPA).

  Poziomy implementacji
As not all systems are expected to support advanced mechanisms like combining characters, ISO/IEC 10646-1 specifies the following three implementation levels of UCS:

Poziom 1
    Nieobsługiwane są znaki składane i Hangul Jamo (specjalne, bardziej skomplikowane kodowanie pisma koreańskiego, w którym sylaby Hangul są kodowane jako dwa lub trzy podznaki).

Poziom 2
    Oprócz zastrzeżeń poziomu 1, obsługiwane są znaki składające w przypadku języków, dla których są one istotne (np. tajski, lao, hebrajski, arabski, dewanagari, malajski).

Poziom 3
    Obsługiwane są wszystkie znaki UCS.

The Unicode 3.0 Standard published by the Unicode Consortium contains exactly the UCS Basic Multilingual Plane at implementation level 3, as described in ISO/IEC 10646-1:2000. Unicode 3.1 added the supplemental planes of ISO/IEC 10646-2. The Unicode standard and technical reports published by the Unicode Consortium provide much additional information on the semantics and recommended usages of various characters. They provide guidelines and algorithms for editing, sorting, comparing, normalizing, converting, and displaying Unicode strings.

  Unikod w systemie Linux
W systemie GNU/Linux, typ C wchar_t jest 32-bitową liczbą typu integer ze znakiem. Jej wartość są interpretowane przez bibliotekę C, zawsze jako wartości kodu UCS (we wszystkich ustawieniach locale), a ta konwencja jest sygnalizowana przez bibliotekę GNU C w stosunku do aplikacji, przez zdefiniowane stałej __STDC_ISO_10646__, zgodnie ze standardem ISO C99.

UCS/Unikod może być używany identycznie jak ASCII w łańcuchach wejścia/wyjścia, komunikacji terminalowej, plikach tekstowych, nazwach plików i zmiennych środowiskowych w wielobajtowym kodowaniu UTF-8 kompatybilnym z ASCII. Aby zasygnalizować używanie kodowania znaków UTF-8 wszystkim aplikacjom, należy wybrać odpowiednie locale za pomocą zmiennych środowiskowych (np. "LANG=pl_PL.UTF-8").

The nl_langinfo(CODESET) function returns the name of the selected encoding. Library functions such as wctomb(3) and mbsrtowcs(3) can be used to transform the internal wchar_t characters and strings into the system character encoding and back and wcwidth(3) tells how many positions (0–2) the cursor is advanced by the output of a character.

  Obszar prywatny - PUA (ang. Private Use Areas)
In the Basic Multilingual Plane, the range 0xe000 to 0xf8ff will never be assigned to any characters by the standard and is reserved for private usage. For the Linux community, this private area has been subdivided further into the range 0xe000 to 0xefff which can be used individually by any end-user and the Linux zone in the range 0xf000 to 0xf8ff where extensions are coordinated among all Linux users. The registry of the characters assigned to the Linux zone is maintained by LANANA and the registry itself is Documentation/admin-guide/unicode.rst in the Linux kernel sources (or Documentation/unicode.txt before Linux 4.10).

Kolejne dwie płaszczyzny zarezerwowane do użytku prywatnego to płaszczyzna 15 (dodatkowy obszar użytku prywatnego A - ang. Supplementary Private Use Area-A, w zakresie 0xf0000 do 0xffffd) oraz 16 (dodatkowy obszar użytku prywatnego B - ang. Supplementary Private Use Area-B, w zakresie 0x100000 do 0x10fffd).

  Literatura

•   Information technology — Universal Multiple-Octet Coded Character Set (UCS) — Part 1: Architecture and Basic Multilingual Plane. International Standard ISO/IEC 10646-1, International Organization for Standardization, Geneva, 2000.

    This is the official specification of UCS. Available from http://www.iso.ch/.

•   The Unicode Standard, Version 3.0. The Unicode Consortium, Addison-Wesley, Reading, MA, 2000, ISBN 0-201-61633-5.

•   S. Harbison, G. Steele. C: A Reference Manual. Fourth edition, Prentice Hall, Englewood Cliffs, 1995, ISBN 0-13-326224-3.

    Dobra książka-informator języka programowania C. Czwarte wydanie obejmuje także 1 Poprawkę do standardu ISO C90, która dodaje znaczną liczbę nowych funkcji bibliotecznych C do obsługi szerokich i wielobajtowych zestawów znaków, ale nie opisuje ISO C99, jeszcze bardziej poprawiającej obsługę znaków szerokich i wielobajtowych.

•   Unicode Technical Reports.
    http://www.unicode.org/reports/

•   Markus Kuhn: UTF-8 and Unicode FAQ for UNIX/Linux.
    http://www.cl.cam.ac.uk/~mgk25/unicode.html

•   Bruno Haible: Unicode HOWTO.
    http://www.tldp.org/HOWTO/Unicode-HOWTO.html

ZOBACZ TAKŻE
locale(1), setlocale(3), charsets(7), utf-8(7)

TŁUMACZENIE
Autorami polskiego tłumaczenia niniejszej strony podręcznika są: Gwidon S. Naskrent <naskrent@hoth.amu.edu.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.