Uniwersalny zestaw znaków kodowanych - Universal Coded Character Set

Uniwersalny kodowany zestaw znaków
Skróty) LUW, Unicode
Języki) Międzynarodowy
Standard ISO/IEC 10646
Formaty kodowania UTF-8 , UTF-16 , GB18030
Rzadziej : UTF-32 , BOCU , SCSU , UTF-7
Poprzedzony ISO 8859 , ISO 2022 , różne inne.

Uniwersalny Coded Character Set ( UCS , Unicode ) to standardowy zestaw znaków zdefiniowany przez międzynarodową normą ISO / IEC  10646 , Technologia informatyczna - Uniwersalny Coded Character Set (UCS) (plus poprawki do tej normy), który jest podstawą wielu kodowania znaków , ulepszane w miarę dodawania znaków z wcześniej niereprezentowanych systemów pisma.

UCS ma ponad 1,1 miliona możliwych punktów kodowych dostępnych do wykorzystania/przydziału, ale tylko pierwsze 65 536, czyli podstawowa płaszczyzna wielojęzyczna (BMP), weszło do powszechnego użytku przed 2000 r. Ta sytuacja zaczęła się zmieniać, gdy Chińska Republika Ludowa ( ChRL) orzekł w 2006 r., że całe oprogramowanie sprzedawane w jej jurysdykcji będzie musiało obsługiwać GB 18030 . Wymagało to oprogramowania przeznaczonego do sprzedaży w ChRL, aby wyjść poza BMP.

System celowo pozostawia wiele punktów kodowych nieprzypisanych do znaków, nawet w BMP. Robi to, aby umożliwić przyszłą rozbudowę lub zminimalizować konflikty z innymi formami kodowania.

Kodowanie formularzy

ISO/IEC 10646 definiuje trzy formy kodowania znaków (i siedem schematów kodowania ) dla Universal Coded Character Set. UCS-2 nie jest już jednym z nich, był najprostszy i jest teraz przestarzały, używa pojedynczej wartości kodu (definiowanej jako liczba, z której jeden lub więcej reprezentuje punkt kodowy ogólnie, ale dla UCS-2 jest to ściśle jedna wartość kodu, która reprezentuje punkt kodowy) od 0 do 65 535 dla każdego znaku i pozwala dokładnie dwóm bajtom (jedno słowo 16- bitowe ) na reprezentowanie tej wartości. W ten sposób UCS-2 pozwala na binarną reprezentację każdego punktu kodowego w BMP, który reprezentuje znak. UCS-2 nie może reprezentować punktów kodowych poza BMP.

Pierwsza poprawka do oryginalnego wydania UCS zdefiniowała UTF-16 , rozszerzenie UCS-2, do reprezentowania punktów kodowych poza BMP. Zakres punktów kodowych w strefie S (specjalnej) BMP pozostaje nieprzypisany do znaków. UCS-2 nie zezwala na użycie wartości kodu dla tych punktów kodowych, ale UTF-16 pozwala na ich użycie w parach. Unicode przyjął również UTF-16, ale w terminologii Unicode elementy o wysokiej połowie strefy stają się „wysokimi surogatami”, a elementy o niskiej połowie strefy stają się „niskimi surogatami”.

Inne kodowanie, UTF-32 (wcześniej nazwane UCS-4), wykorzystuje cztery bajty (łącznie 32 bity) do zakodowania pojedynczego znaku przestrzeni kodu . W ten sposób UTF-32 pozwala na binarną reprezentację każdego punktu kodowego w UCS, w tym poza BMP. Podobnie jak w UCS-2, każdy zakodowany znak ma ustaloną długość w bajtach, co ułatwia manipulację, ale oczywiście wymaga dwa razy więcej pamięci niż UCS-2.

Obecnie dominującym kodowaniem UCS jest UTF-8 , który jest kodowaniem o zmiennej szerokości zaprojektowanym z myślą o wstecznej kompatybilności z ASCII oraz w celu uniknięcia komplikacji związanych z endianness i znacznikami kolejności bajtów w UTF-16 i UTF-32. Ponad 97% wszystkich stron internetowych jest zakodowanych w UTF-8. Internet Engineering Task Force (IETF) wymaga, aby wszystkie protokoły internetowe identyfikowały kodowanie używane dla danych znakowych, a obsługiwane kodowanie znaków musi zawierać UTF-8. Internet Mail Consortium (IMC) zaleca, aby wszystkie programy poczty e-mail mogły wyświetlać i tworzyć pocztę przy użyciu kodowania UTF-8. Jest również coraz częściej używany jako domyślne kodowanie znaków w systemach operacyjnych, językach programowania, interfejsach API i aplikacjach.

Historia

Międzynarodowa Organizacja Normalizacyjna (ISO) postanowił skomponować zestaw znaków powszechnego w 1989 roku, a opublikował projekt normy ISO 10646 w 1990 roku Hugh Ross McGregor był jednym z jej głównych architektów. Ten standard znacznie różnił się od obecnego. Definiowała:

  • 128 grup
  • 256 samolotów
  • 256 rzędów
  • 256 komórek,

dla pozornej sumy 2 147 483 648 znaków, ale w rzeczywistości standard mógł kodować tylko 679 477 248 znaków, ponieważ polityka zabraniała wartości bajtowych kodów kontrolnych C0 i C1 (0x00 do 0x1F i 0x80 do 0x9F, w notacji szesnastkowej ) w dowolnym z czterech bajtów określając grupę, płaszczyznę, wiersz i komórkę. Na przykład łacińska wielka litera A miała lokalizację w grupie 0x20, samolot 0x20, wiersz 0x20, komórka 0x41.

Można zakodować znaki tego pierwotnego standardu ISO 10646 na jeden z trzech sposobów:

  1. UCS-4, cztery bajty na każdy znak, umożliwiające proste kodowanie wszystkich znaków;
  2. UCS-2, dwa bajty na każdy znak, umożliwiające kodowanie pierwszej płaszczyzny, 0x20, Basic Multilingual Plane, zawierającej pierwsze 36 864 punkty kodowe, bezpośrednio, oraz inne płaszczyzny i grupy poprzez przełączenie się na nie za pomocą sekwencji specjalnych ISO 2022 ;
  3. UTF-1 , który koduje wszystkie znaki w sekwencjach bajtów o różnej długości (od 1 do 5 bajtów, z których każdy nie zawiera kodów sterujących).

Dlatego w 1990 r. istniały dwie inicjatywy na rzecz uniwersalnego zestawu znaków: Unicode , z 16 bitami na każdy znak (65 536 możliwych znaków) oraz ISO 10646. Firmy programistyczne odmówiły zaakceptowania złożoności i rozmiaru wymagań normy ISO i były w stanie przekonanie wielu krajowych organów ISO do głosowania przeciwko niemu. Normalizatorzy ISO zdali sobie sprawę, że nie mogą dalej wspierać standardu w jego obecnym stanie i wynegocjowali ujednolicenie swojego standardu z Unicode. Nastąpiły dwie zmiany: zniesienie ograniczenia znaków (zakaz wartości kodów kontrolnych), a tym samym otwarcie punktów kodowych takich jak 0x0000101F do alokacji; oraz synchronizacja repertuaru Basic Multilingual Plane z Unicode.

Tymczasem z biegiem czasu sytuacja zmieniła się w samym standardzie Unicode: 65 536 znaków okazało się niewystarczające, a standard od wersji 2.0 i nowszych obsługuje kodowanie 1 112 064 punktów kodowych z 17 płaszczyzn za pomocą mechanizmu zastępczego UTF-16 . Z tego powodu ISO 10646 ograniczono tak, aby zawierało tyle znaków, ile można było zakodować w UTF-16 i nie więcej, czyli nieco ponad milion znaków zamiast ponad 679 milionów. Kodowanie UCS-4 ISO 10646 zostało włączone do standardu Unicode z ograniczeniem do zakresu UTF-16 i pod nazwą UTF-32 , chociaż nie ma prawie żadnego zastosowania poza wewnętrznymi danymi programów.

Rob Pike i Ken Thompson , projektanci systemu operacyjnego Plan 9 , opracowali nowe, szybkie i dobrze zaprojektowane kodowanie o mieszanej szerokości, które zostało nazwane UTF-8 , obecnie najpopularniejszym kodowaniem UCS.

Różnice w stosunku do Unicode

ISO 10646 i Unicode mają identyczny repertuar i liczby — te same znaki z tymi samymi numerami istnieją w obu standardach, chociaż Unicode wydaje nowe wersje i częściej dodaje nowe znaki. Unicode ma reguły i specyfikacje wykraczające poza zakres ISO 10646. ISO 10646 to prosta mapa znaków, rozszerzenie poprzednich standardów, takich jak ISO 8859 . W przeciwieństwie do tego, Unicode dodaje reguły sortowania , normalizacji formularzy i dwukierunkowy algorytm dla skryptów pisanych od prawej do lewej, takich jak arabski i hebrajski. Aby zapewnić współdziałanie między platformami, zwłaszcza jeśli używane są skrypty dwukierunkowe, obsługa ISO 10646 nie jest wystarczająca; Musi być zaimplementowany Unicode.

Aby obsługiwać te reguły i algorytmy, Unicode dodaje wiele właściwości do każdego znaku w zestawie, takich jak właściwości określające domyślną klasę dwukierunkową znaku i właściwości określające sposób łączenia znaku z innymi znakami. Jeśli znak reprezentuje wartość liczbową, taką jak europejska liczba „8” lub wulgarny ułamek „¼”, ta wartość liczbowa jest również dodawana jako właściwość znaku. Unicode zamierza te właściwości obsługiwać interoperacyjną obsługę tekstu z mieszanką języków.

Niektóre aplikacje obsługują znaki ISO 10646, ale nie obsługują w pełni Unicode. Jedna z takich aplikacji, Xterm , może poprawnie wyświetlać wszystkie znaki ISO 10646, które mają odwzorowanie jeden do jednego znaku na glif i pojedynczą kierunkowość. Może obsługiwać niektóre znaki łączenia za pomocą prostych metod przekreślania, ale nie może wyświetlać hebrajskiego (dwukierunkowego), dewanagari (jeden znak na wiele glifów) ani arabskiego (obie cechy). Większość aplikacji GUI korzysta ze standardowych procedur rysowania tekstu systemu operacyjnego, które obsługują takie skrypty, chociaż same aplikacje nadal nie zawsze obsługują je poprawnie.

Cytowanie uniwersalnego kodowanego zestawu znaków

ISO 10646 , ogólny, nieformalny cytat z rodziny norm ISO/IEC 10646, jest akceptowalny w większości prozy. I chociaż jest to osobny standard, termin Unicode jest używany równie często, nieformalnie, przy omawianiu UCS. Jednak wszelkie odniesienia normatywne do LUW jako publikacji powinny podawać rok wydania w postaci ISO/IEC 10646:{rok} , na przykład: ISO/IEC 10646:2014 .

Związek z Unicode

Od 1991 roku Konsorcjum Unicode i ISO opracowują wspólnie standard Unicode („Unicode”) i ISO/IEC 10646. Repertuar, nazwy postaci i punkty kodowe Unicode w wersji 2.0 dokładnie odpowiadają tym z normy ISO/IEC 10646-1:1993 z jej pierwszymi siedmioma opublikowanymi poprawkami. Po opublikowaniu Unicode 3.0 w lutym 2000, odpowiednie nowe i zaktualizowane znaki weszły do ​​UCS poprzez ISO/IEC 10646-1:2000. W 2003 roku, części 1 i 2 normy ISO/IEC 10646 zostały połączone w jedną część, która od tego czasu miała wiele poprawek dodających znaki do normy w przybliżonej synchronizacji ze standardem Unicode.

  • ISO / IEC 10646-1: 1993 = Unicode 1,1
  • ISO/IEC 10646-1:1993 plus poprawki 5 do 7 = Unicode 2.0
  • ISO/IEC 10646-1:1993 plus poprawki 5 do 7 = Unicode 2.1 z wyłączeniem znaku Euro i znaku zastępującego obiekt , które są zawarte w poprawce 18
  • ISO/IEC 10646-1:2000 = Unicode 3.0
  • ISO/IEC 10646-1:2000 i ISO/IEC 10646-2:2001 = Unicode 3.1
  • ISO/IEC 10646-1:2000 plus poprawka 1 i ISO/IEC 10646-2:2001 = Unicode 3.2
  • ISO/IEC 10646:2003 = Unicode 4.0
  • ISO/IEC 10646:2003 plus poprawka 1 = Unicode 4.1
  • ISO/IEC 10646:2003 plus poprawki 1 do 2 = Unicode 5.0 z wyłączeniem liter Devanagari GGA, JJA, DDDA i BBA, które są zawarte w poprawce 3
  • ISO/IEC 10646:2003 plus poprawki 1 do 4 = Unicode 5.1
  • ISO/IEC 10646:2003 plus poprawki 1 do 6 = Unicode 5.2
  • ISO/IEC 10646:2003 plus poprawki 1 do 8 = ISO/IEC 10646:2011 = Unicode 6.0 z wyłączeniem znaku rupii indyjskiej
  • ISO/IEC 10646:2012 = Unicode 6.1
  • ISO/IEC 10646:2012 = Unicode 6.2 z wyłączeniem znaku liry tureckiej , który jest uwzględniony w poprawce 1
  • ISO / IEC 10646: 2012 = Unicode 6.3 z wyłączeniem znaku liry tureckiej , który jest zawarty w poprawce 1, i pięciu dwukierunkowych znaków kontrolnych (znak litery arabskiej, izolacja od lewej do prawej, izolacja od prawej do lewej, pierwsza silna izolacja, pop Izolacja Kierunkowa), które są zawarte w Poprawce 2
  • ISO/IEC 10646:2012 plus poprawki 1 i 2 = Unicode 7.0 z wyłączeniem znaku rubla
  • ISO / IEC 10646: 2014 plus poprawka 1 = Unicode 8.0 z wyłączeniem znaku Lari , dziewięciu zunifikowanych ideogramów CJK i 41 znaków emoji
  • ISO / IEC 10646: 2014 plus poprawki 1 i 2 = Unicode 9.0 z wyłączeniem Adlam, Newa, japońskich symboli telewizyjnych i 74 emoji i symboli
  • ISO / IEC 10646: 2017 = Unicode 10,0 z wyłączeniem 285 znaków Hentaigana , 3 znaki kwadratowe Zanabazar i 56 symboli emoji
  • ISO / IEC 10646: 2017 plus poprawka 1 = Unicode 11.0 z wyłączeniem 46 gruzińskich wielkich liter Mtavruli, 5 ujednoliconych ideogramów CJK i 66 znaków emoji
  • ISO / IEC 10646: 2017 plus poprawki 1 i 2 = Unicode 12.0 z wyłączeniem 62 dodatkowych znaków
  • ISO/IEC 10646:2020 = Unicode 13,0
  • ISO/IEC 10646:2021 = Unicode 14,0

Zobacz też

Uwagi

Bibliografia

Zewnętrzne linki