Znaki kontrolne Unicode
Wiele znaków Unicode służy do sterowania interpretacją lub wyświetlaniem tekstu, ale same te znaki nie mają wizualnej ani przestrzennej reprezentacji. Na przykład znak null ( U+0000 NULL ) jest używany w środowiskach aplikacji programowania C do wskazania końca ciągu znaków. W ten sposób programy te wymagają tylko jednego początkowego adresu pamięci dla łańcucha ( w przeciwieństwie do adresu początkowego i długości), ponieważ łańcuch kończy się, gdy program odczyta znak zerowy.
W najwęższym znaczeniu kod kontrolny to znak z ogólną kategorią Cc
, która obejmuje kody kontrolne C0 i C1 , koncepcja zdefiniowana w ISO/IEC 2022 i odziedziczona przez Unicode, przy czym najczęstszy zestaw jest zdefiniowany w ISO/IEC 6429 . Kody kontrolne są obsługiwane inaczej niż zwykłe znaki Unicode, na przykład przez to, że nie przypisuje się im nazw znaków (chociaż przypisuje się im formalne aliasy normatywne). W szerszym znaczeniu inne znaki formatu niedrukowalnego, takie jak te używane w tekście dwukierunkowym , są również określane przez oprogramowanie jako znaki kontrolne ; są one w większości przypisane do ogólnej kategorii Cf
(format), używanej dla efektorów formatu wprowadzonych i zdefiniowanych przez sam Unicode.
Kody kontrolne kategorii „Cc” (C0 i C1)
Zakresy kodów kontrolnych 0x00–0x1F („C0”) i 0x7F pochodzą z wydania US-ASCII z 1967 r . Norma ISO / IEC 2022 (ECMA-35) definiuje metody rozszerzające dla ASCII, w tym dodatkowy zakres „C1” 8-bitowych kodów sterujących od 0x80 do 0x9F, co odpowiada 7-bitowym sekwencjom ESC z bajtami od 0x40 do 0x5F . Łącznie kody w tych zakresach są znane jako kody kontrolne C0 i C1 . Chociaż ISO/IEC 2022 dopuszcza istnienie wielu zestawów kodów kontrolnych określających różne interpretacje tych kodów kontrolnych, ich najbardziej powszechna interpretacja jest określona w ISO/IEC 6429 (ECMA-48).
Seria kodowań ISO/IEC 8859 jest zgodna z ISO/IEC 4873 (ECMA-43) poziom 1, podzbiorem ISO/IEC 2022 przeznaczonym do 8-bitowego kodowania znaków, dlatego rezerwuje zakres 0x80–0x9F do użytku jako drukowanie kodów za pomocą zestawów kodów kontrolnych C1, takich jak ISO / IEC 6429. Unicode dziedziczy swój pierwszy i drugi blok (zawierający U + 0000 do U + 00FF) z ASCII i ISO / IEC 8859-1 , włączając w ten sposób zakresy kodów kontrolnych C0 i C1 (U+0000–U+001F, U+007F–U+009F) jako kategoria ogólna „DW”. Nie przypisuje normatywnych nazw tym kodom kontrolnym, chociaż przypisuje im aliasy normatywne.
Kody sterujące kategorii „Cc” mogą służyć różnym celom, nie ograniczając się do efektorów formatu: na przykład domyślny zestaw ASCII C0 zawiera sześć efektorów formatu ( BS , HT , LF , VT , FF i CR ), dziesięć elementów sterujących transmisją, cztery kontrolki urządzeń, cztery separatory informacyjne i osiem innych kodów kontrolnych. Większość z tych znaków nie odgrywa wyraźnej roli w obsłudze tekstu Unicode i jest używana tylko przez protokoły wyższego poziomu, takie jak te używane przez emulatory terminali . Niektóre znaki są powszechnie używane do formatowania lub ostrzegawczych :
- U+0000 NULL (używane w łańcuchach zakończonych znakiem null )
- U+0009 TABULACJA POZIOMA (HT) (wstawiana za pomocą klawisza tabulatora )
- U+000A WYSUNIĘCIE WIERSZA (LF) (używane jako podział wiersza )
- U+000C FORM FEED (FF) (oznacza podział strony w zwykłym pliku tekstowym)
- U + 000D CARRIAGE RETURN (CR) (używany w niektórych konwencjach łamania linii)
- U + 0085 NEXT LINE (NEL) (czasami używany jako podział wiersza w tekście transkodowanym z EBCDIC )
Unicode określa tylko semantykę dla U+0009—U+000D , U+001C—U+001F i U+0085 (efektory formatu ASCII z wyjątkiem BS , plus separatory informacji ASCII i C1 NEL ). Pozostałe kody kontrolne „Cc” są przezroczyste dla Unicode, a ich znaczenie jest pozostawione protokołom wyższego poziomu, chociaż jako domyślna sugerowana jest interpretacja zgodna z normą ISO / IEC 6429. Ponadto niektóre wyspecjalizowane protokoły wyższego poziomu, takie jak transkodowany telegazeta , mogą zawierać inną interpretację całego zakresu kodów sterujących C0.
Unicode wprowadził separatory
Próbując uprościć kilka znaków nowej linii używanych w starszym tekście [ potrzebne źródło ] , Unicode wprowadza własne znaki nowej linii do oddzielania linii lub akapitów: U+2028 LINE SEPARATOR (w skrócie LS lub LSEP) i U+2029 PARAGRAPH SEPARATOR (w skrócie PS lub PSEP).
Podobnie jak CR i LF, LS i PS są efektorami formatowania tekstu; w przeciwieństwie do CR i LF, nie są one traktowane jako „kody kontrolne” dla celów ECMA-35 / ECMA-48 (kategoria Cc
), a raczej mają semantykę zdefiniowaną całkowicie przez sam Unicode. Są one przypisane do sui generis kategorii Unicode odpowiednio Zl
i Zp
, w ramach głównej kategorii Z
(separator) używanej dla niektórych białych znaków .
Tagi językowe
Unicode poprzednio zawierał 128 znaków, obecnie przestarzałych, dla znaczników języka. Znaki te zasadniczo odzwierciedlały 128 znaków ASCII, ale były używane do identyfikacji kolejnego tekstu jako należącego do określonego języka zgodnie z BCP47 . Na przykład, aby wskazać kolejny tekst jako wariant języka angielskiego napisany w Stanach Zjednoczonych, sekwencja U+E0001 ZNACZNIK JĘZYKA , U+E0065 TAG LATIN SMALL LETTER E , U+E006E TAG LATIN SMALL LETTER N , U+E002D TAG HYPHEN -MINUS , U+E0075 TAG ŁACIŃSKA MAŁA LITERA U i U+E0073 TAG ŁACIŃSKA MAŁA LITERA S zostałaby użyta.
Te znaki znaczników języka nie byłyby wyświetlane same. Jednak dostarczałyby informacji do przetwarzania tekstu, a nawet do wyświetlania innych znaków. Na przykład wyświetlanie ideogramów Unihan mogło zastępować różne glify, jeśli znaczniki językowe wskazywały na koreański, niż gdyby znaczniki wskazywały na japoński. Inny przykład mógł wpłynąć na wyświetlanie cyfr dziesiętnych od 0 do 9 w różny sposób w zależności od języka, w którym się pojawiły.
Znaki znaczników U+E0001 LANGUAGE TAG i U+E007F CANCEL TAG są przestarzałe w Unicode 5.1 (2008) i nie powinny być używane do informacji o języku. Znaki U + E0020 — U + E0073 również zostały wycofane, ale zostały przywrócone wraz z wydaniem Unicode 8.0 (2015). Zmiana została wprowadzona „aby utorować drogę do potencjalnego wykorzystania znaków znaczników w przyszłości do celów innych niż reprezentowanie znaczników językowych”. Unicode stwierdza, że „użycie znaków znaczników do reprezentowania znaczników językowych w strumieniu zwykłego tekstu jest nadal przestarzałym mechanizmem przekazywania informacji językowych o tekście.
Adnotacja międzyliniowa
Trzy znaki formatowania zapewniają obsługę adnotacji międzyliniowych ( U+FFF9 INTERLINEAR ANNOTATION ANCHOR , U+FFFA INTERLINEAR ANNOTATION SEPARATOR , U+FFB INTERLINEAR ANNOTATION TERMINATOR ). Może to służyć do dostarczania notatek, które zwykle byłyby wyświetlane między wierszami innego tekstu. Unicode traktuje taką adnotację jako tekst sformatowany i zaleca stosowanie innych protokołów do takiej adnotacji. W3C Ruby jest przykładem alternatywnego protokołu obsługującego bardziej zaawansowaną adnotację międzyliniową.
Dwukierunkowa kontrola tekstu
Unicode obsługuje standardowy tekst dwukierunkowy bez żadnych znaków specjalnych. Innymi słowy, oprogramowanie zgodne z Unicode powinno wyświetlać znaki pisane od prawej do lewej, takie jak litery hebrajskie, jako pisane od prawej do lewej, po prostu na podstawie właściwości tych znaków. Podobnie Unicode obsługuje mieszankę tekstu pisanego od lewej do prawej z tekstem pisanym od prawej do lewej bez żadnych znaków specjalnych. Na przykład można zacytować język arabski („بسم الله”) (przetłumaczony na angielski jako „Bismillah”) obok angielskiego, a litery arabskie będą płynąć od prawej do lewej, a litery łacińskie od lewej do prawej.
Jednak kierunkowość może nie zostać poprawnie wykryta, jeśli tekst pisany od lewej do prawej jest cytowany na początku akapitu od prawej do lewej (lub odwrotnie ), a obsługa tekstu dwukierunkowego staje się jeszcze bardziej skomplikowana, gdy tekst przepływa w przeciwnych kierunkach jest osadzony hierarchicznie, na przykład jeśli tekst w języku angielskim cytuje wyrażenie arabskie, które z kolei cytuje wyrażenie angielskie. Inne sytuacje również mogą to skomplikować, na przykład gdy autor chce zastąpić znaki pisane od lewej do prawej, tak aby płynęły od prawej do lewej. Chociaż takie sytuacje są dość rzadkie, Unicode zapewnia dwanaście znaków, które pomagają kontrolować te osadzone dwukierunkowe poziomy tekstu do 125 poziomów:
- U + 061C Ü ZNAK LITER ARABSKICH
- U + 200E ZNAK OD LEWEJ DO PRAWEJ
- U+200F OZNACZENIE OD PRAWEJ DO LEWEJ
- U+202A Osadzanie od lewej do prawej
- U+202B Osadzanie od prawej do lewej
- U + 202C POP KIERUNKOWE FORMATOWANIE
- U + 202D NADPISANIE OD LEWEJ DO PRAWEJ
- U + 202E NADPISANIE OD PRAWEJ DO LEWEJ
- U + 2066 <a i=1>IZOLATY OD LEWEJ DO PRAWEJ
- U+2067 IZOLATY <a i=1>OD PRAWEJ DO LEWEJ
- U+2068 <a i=1>PIERWSZY SILNY IZOLAT
- U+2069 <a i=1>POP KIERUNKOWY IZOLAT
Selektory wariantów
Wiele znaków jest mapowanych na alternatywne glify w zależności od kontekstu. Na przykład kursywa arabska i łacińska zastępują różne glify, aby połączyć ze sobą glify w zależności od tego, czy znak jest początkowym znakiem w słowie, końcowym, środkowym czy izolowanym znakiem. Te typy zastępowania glifów są łatwo obsługiwane przez kontekst postaci, bez udziału innych wkładów autorskich. Autorzy mogą również używać znaków specjalnego przeznaczenia, takich jak łączniki i osoby niebędące łącznikami, aby wymusić alternatywną formę glifu tam, gdzie inaczej by się nie pojawił. Ligatury są podobnymi przypadkami, w których glify można zastąpić po prostu przez włączenie lub wyłączenie ligatur jako atrybutu tekstu sformatowanego.
Jednak w przypadku innych podstawień glifów intencje autora mogą wymagać zakodowania w tekście i nie można ich określić kontekstowo. Tak jest w przypadku znaków/glifów określanych jako gaiji , gdzie różne glify są używane dla tego samego znaku albo w historii, albo w ideogramach nazwisk rodowych. Jest to jeden z szarych obszarów w odróżnianiu glifu od znaku. Jeśli nazwisko rodowe różni się nieco od znaku ideogramu, z którego pochodzi, to jest to prosty wariant glifu lub wariant znaku. Począwszy od Unicode 3.2 i 4.0, zestaw znaków zawiera teraz 256 selektorów odmian, dzięki czemu te znaki łączące mogą wybierać spośród 256 możliwych odmian znaków / glifów dla poprzedniego znaku.
Zdjęcia kontrolne
Unicode zapewnia znaki graficzne do reprezentowania kodów sterujących C0 (oraz spację i ogólną nową linię ) w bloku obrazów sterujących . Są to reprezentacje wizualne, a nie same kody kontrolne. Nie ma równoważnych znaków dla kodów kontrolnych C1 .
Control Pictures Oficjalny wykres kodu konsorcjum Unicode (PDF) |
||||||||||||||||
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | mi | F | |
U+240x | ␀ | ␁ | ␂ | ␃ | ␄ | ␅ | ␆ | ␇ | ␈ | ␉ | ␊ | ␋ | ␌ | ␍ | ␎ | ␏ |
U+241x | ␐ | ␑ | ␒ | ␓ | ␔ | ␕ | ␖ | ␗ | ␘ | ␙ | ␚ | ␛ | ␜ | ␝ | ␞ | ␟ |
U+242x | ␠ | ␡ | ␢ | ␣ |  | ␥ | ␦ | |||||||||
U + 243x | ||||||||||||||||
Zobacz też
- ^ a b „Aliasy nazw” . Baza danych znaków Unicode . Konsorcjum Unicode .
-
^ a b
Segan, Danilo. „W kierunku zlokalizowanego pulpitu” .
W niektórych przypadkach, gdy automatyczne podejmowanie decyzji nie działa, możesz ręcznie dodać określone znaczniki kierunku, klikając prawym przyciskiem myszy pole tekstowe, wybierając z menu opcję „Wstaw znak kontrolny Unicode” i wybierając odpowiedni znacznik kierunku. Pozwoliłoby to na przykład rozpocząć tekst RTL słowem LTR (takim jak „GNOME”).
-
^
ISO/IEC JTC 1/SC 2/WG 3 (12.02.1998). Ostateczny tekst DIS 8859-1, 8-bitowe jednobajtowe kodowane zestawy znaków graficznych - Część 1: Alfabet łaciński nr 1 (PDF) . ISO / IEC FDIS 8859-1:1998; JTC1/SC2/N2988; WG3/N411.
Ten zestaw zakodowanych znaków graficznych można uznać za wersję 8-bitowego kodu zgodnie z ISO/IEC 2022 lub ISO/IEC 4873 na poziomie 1. […] Zacienione pozycje w tabeli kodów odpowiadają kombinacjom bitów, które nie reprezentować znaki graficzne. Ich użycie wykracza poza zakres normy ISO/IEC 8859; jest to określone w innych normach międzynarodowych, na przykład ISO/IEC 6429.
- ^ ISO/TC 97/SC 2 (1975). Zestaw znaków kontrolnych ISO 646 (PDF) . ITSCJ/ IPSJ . ISO-IR -1. Zarchiwizowane od oryginału (PDF) w dniu 2022-03-10.
- ^ Konsorcjum Unicode (2019). 23.1: Kody kontrolne (PDF) . Standard Unicode (wyd. 12.0.0). s. 868–870. ISBN 978-1-936213-22-1 .
-
^
Ewell, Doug (16.10.2020). „Grafiki mozaikowe oddzielone teletekstem” . Archiwum listy mailingowej Unicode . Konsorcjum Unicode .
Powtarzam, że to UTC [ Unicode Technical Committee ] i Script Ad Hoc dostarczyły wskazówek grupie piszącej propozycję Symbols for Legacy Computing (a druga jest w drodze), że od 0x00 do 0x1F w oryginalnym zestawie teletekstu powinny być mapowane do U+0000 do U+001F podczas konwersji na Unicode.
-
^
Klensin, John C.; Presuhn, Randy; Whistler, Ken; Dürst, Martin J.; Adams, Glenn (listopad 2010). Presuhn, R. (red.). „RFC6082: Wycofywanie znaków znaczników języka Unicode: RFC 2482 jest historyczny” . Internet Engineering Task Force (IETF). doi : 10.17487/RFC6082 .
{{ cite journal }}
: Cite journal wymaga|journal=
( pomoc ) - ^ a b „Unicode 8.0.0, Implikacje dla migracji” . Konsorcjum Unicode.
- ^ „UAX # 9: dwukierunkowy algorytm Unicode” . Konsorcjum Unicode. 2018-05-09.