22:40 Юнікод | |
Юнікод[1] (найчастіше) або Унікод[2] (англ. Unicode) — стандарт кодування символів, що дозволяє представити знаки майже всіх письмових мов[3]. Стандарт запропонований у 1991 році некомерційною організацією «Консорціум Unicode» (англ. Unicode Consortium, Unicode Inc.)[4][5]. Застосування цього стандарту дозволяє закодувати дуже велике число символів з різних писемностей: в документах Unicode можуть сусідити китайські ієрогліфи, математичні символи, букви грецького алфавіту, латиниці і кирилиці, при цьому стає непотрібним перемикання кодових сторінок[6]. Стандарт складається з двох основних розділів: універсальний набір символів (англ. UCS, universal character set) і сімейство кодувань (англ. UTF, Unicode transformation format). Універсальний набір символів задає однозначне відповідність кодами символів — елементів кодового простору, що становлять невід'ємні цілі числа. Сімейство кодувань визначає машинне подання послідовності кодів UCS. Коди в стандарті Unicode розділені на декілька областей. Область з кодами від U+0000 до U+007F містить символи ASCII з відповідними кодами. Далі розташовані області знаків різних писемностей, знаки пунктуації та технічні символи. Частина кодів зарезервована для використання в майбутньому[7]. Під символи кирилиці виділені області символів з кодами від U+0400 до U+052F, від U+2DE0 до U+2DFF, від U+A640 до U+A69F (див. Кирилиця в Юнікод)[8]. До кінця 1980-х років стали стандартом 8-бітові символи, при цьому існувало безліч різних 8-бітних кодувань, і постійно з'являлися все нові. Це пояснювалося як постійним розширенням кола підтримуваних мов, так і прагненням створити кодування, частково сумісну з якою-небудь інший (характерний приклад — поява альтернативної кодування для російської мови, зумовлене експлуатацією західних програм, створених для кодування CP437). В результаті з'явилося кілька проблем: Проблема кракозябр[en] (відображення документів в неправильному кодуванні)[6]: її можна було вирішити або послідовним впровадженням методів вказівки використовуваного кодування, або впровадженням єдиної для всіх кодування. Проблема обмеженості набору символів[6]: її можна було вирішити або перемиканням шрифтів межах документа, або впровадженням «широкої» кодування. Перемикання шрифтів здавна практикувалося в текстових процесорах, причому часто використовувалися шрифти з нестандартною кодуванням, т. зв. «dingbat fonts» — у підсумку при спробі перенести документ в іншу систему всі нестандартні символи перетворювалися в кракозябры. Проблема перетворення одного кодування в іншу: її можна було вирішити або складанням таблиць перекодування для кожної пари кодувань, або використанням проміжного перетворення в третю кодування, що включає всі символи всіх кодувань[9]. Проблема дублювання шрифтів: особливо для кожного кодування робився свій шрифт, навіть якщо ці кодування частково (або повністю) збігалися з набору символів: цю проблему можна було вирішити, роблячи «великі» шрифти, з яких потім вибираються потрібні для даної кодування символи — однак це вимагає створення єдиного реєстру символів, щоб визначати, чому що відповідає. Було визнано необхідним створення єдиної «широкої» кодування. Кодування із змінною довжиною символу, широко використовуються в Східній Азії, були визнані занадто складними у використанні, тому було вирішено використовувати символи фіксованої ширини. Використання 32-бітних символів здавалося дуже марнотратним, тому було вирішено використовувати 16-бітні. Таким чином, перша версія Юнікоду являла собою кодування з фіксованим розміром символу в 16 біт, тобто загальна кількість кодів було 216 (65 536). Звідси походить практика позначення символів чотирма шістнадцятковими цифрами (наприклад, U+04F0). При цьому в Юнікод планувалося кодувати не всі існуючі символи, а тільки ті, які необхідні у повсякденному вжитку. Рідко використовувані символи повинні були розміщуватися в області користувальницьких символів» (private use area), яка спочатку займала коди U+D800...U+F8FF. Щоб використовувати Юнікод також і в якості проміжної ланки при перетворенні різних кодувань один в одного, в нього включили всі символи, представлені у всіх найбільш відомих кодуваннях. Надалі, однак, було прийнято рішення кодувати всі символи і у зв'язку з цим значно розширити кодову область. Одночасно з цим, коди символів стали розглядатися не як 16-бітні значення, а як абстрактні числа, які в комп'ютері можуть представлятися безліччю різних способів (див. Способи подання). Оскільки в ряді комп'ютерних систем (наприклад, Windows NT[10]) фіксовані 16-бітові символи використовувалися в якості кодування за замовчуванням, було вирішено всі найбільш важливі знаки кодувати тільки у межах перших 65 536 позицій (так звана англ. basic multilingual plane, BMP). Решта простір використовується для «додаткових символів» (англ. supplementary characters): систем письма вимерлих мов або дуже рідко використовуваних китайських ієрогліфів, математичних і музичних символів. Для сумісності зі старими 16-бітними системами була винайдена система UTF-16, де перші 65 536 позицій, за винятком позицій з інтервалу U+D800...U+DFFF, відображаються безпосередньо як 16-бітні числа, а решта представляються у вигляді «сурогатних пар» (перший елемент пари з області U+D800...U+DBFF, другий елемент пари з області U+DC00...U+DFFF). Для сурогатних пар була використана частина кодового простору (2048 позицій), відведеного для приватного використання». Оскільки в UTF-16 можна відобразити тільки 220+216-2048 (1 112 064) символів, то це число і було обрано в якості остаточної величини кодового простору Юнікоду (діапазон кодів: 0x000000-0x10FFFF) Хоча кодова область Юнікоду була розширена за межі 216 вже у версії 2.0, перші символи «верхній» області були розміщені тільки у версії 3.1. Роль цієї кодування веб-секторі постійно зростає, на початок 2010 частка веб-сайтів, що використовують Юнікод, склала близько 50 %[ Хоча форми запису UTF-8 і UTF-32 дозволяють кодувати до 231 (2 147 483 648) кодових позицій, було прийнято рішення використовувати лише 1 112 064 для сумісності з UTF-16. Втім, навіть і цього на поточний момент більш ніж достатньо — у версії 6.0 використовується трохи менше 110 000 кодових позицій (109 242 графічних і 273 інших символів). Кодове простір розбито на 17 площин (англ. planes) по 216 (65 536) символів. Нульова площину (англ. plane 0) називається базовою (англ. basic) і містить символи найбільш уживаних письменностей. Решта площині — додаткові (англ. supplementary). Перша площина (англ. plane 1) використовується, в основному, для історичних писемностей, друга (англ. plane 2) — для рідко використовуваних ієрогліфів китайської мови (ККЯ), третя (англ. plane 3) зарезервована для архаїчних китайських ієрогліфів[31]. Площині 15 і 16 виділені для приватного вжитку[7]. Для позначення символів Unicode використовується запис виду «U+xxxx» (для кодів 0...FFFF), або «U+xxxxx» (для кодів 10000...FFFFF), або «U+xxxxxx» (для кодів 100000...10FFFF), де xxx — шістнадцяткові цифри. Наприклад, символ «я» (U+044F) має код 044F16 = 1103 Універсальна система кодування Юнікод) являє собою набір графічних символів і спосіб їх кодування для комп'ютерної обробки текстових даних. Графічні символи — це символи, що мають видиме зображення. Графічним символам протиставляються керуючі символи і символи форматування. Графічні символи включають в себе наступні групи: букви, що містяться хоча б в одному з обслуговуваних алфавітів; цифри; знаки пунктуації; спеціальні знаки (математичні, технічні, ідеограми та ін); роздільники. Юнікод — це система для лінійного представлення тексту. Символи, що мають додаткові над - або підрядкові елементи, можуть бути представлені у вигляді побудованої за певними правилами послідовності кодів (складовою варіант, composite character) або у вигляді єдиного символу (монолітний варіант, precomposed character). На даний момент (2014) вважається, що всі букви великих писемностей в Юнікод внесені, і якщо символ доступний в складеному варіанті, дублювати його в монолітному вигляді не потрібно. Консорціум не створює нового, а констатує сформований порядок речей [32]. Наприклад, картинки «emoji» були додані тому, що японські оператори мобільного зв'язку широко їх використовували. Для цього додавання символу проходить через складний процес [32]. І, наприклад, символ рубля пройшов його за три місяці просто тому, що до цього шість років широко використовувався. Товарні знаки кодують тільки в порядку винятку. Так, в Юнікод немає прапора Windows або яблука Apple. Як тільки символ з'явився в кодуванні, він ніколи не зрушить і не зникне. Якщо ж потрібно змінити порядок символів, це робиться не зміною позицій, а національним порядком сортування. Є й інші, більш тонкі гарантії стабільності — наприклад, не будуть змінюватися таблиці нормалізації Один і той же символ може мати кілька форм; в Юнікод ці форми входять одній кодовій позицією: якщо це склалося історично. Наприклад, в арабських літер є чотири форми: відособлена, на початку, в середині і в кінці[34]; або якщо в одній мові прийнята одна форма, а в іншому — інша. Болгарська кирилиця відрізняється від російської, а китайські ієрогліфи — від японських. З іншого боку, якщо історично в шрифтах були дві різних кодових позиції, вони залишаються різними і в Юнікод. Мала грецька сигма має дві форми, і вони різні позиції. А з гуртком і знак ангстрема, грецьке мю " і латинське «мікро-» — різні символи. Звичайно ж, схожі символи в неспоріднених писемностях ставляться в різні кодові позиції. Наприклад, літера «А» у латиницею і кирилицею, грецькою та черокі — різні символи. Вкрай рідко один і той же символ ставиться в дві різні кодові позиції для спрощення обробки тексту. Математичний штрих і такий штрих для індикації м'якості звуків — різні символи, другий вважається буквою. Графічні символи в кодуванні Юнікод поділяються на протяжні і непротяженные (бесширинные). Непротяженные символи при відображенні не займають місця в рядку. До них відносяться, зокрема, знаки наголосу та інші діакритичні знаки. Як протяжні, так і непротяженные символи мають власні коди. Протяжні символи інакше називаються базовими (англ. base characters), а непротяженные — модифікуючими (англ. combining characters); причому останні не можуть зустрічатися самостійно. Наприклад, символ «á» може бути представлений як послідовність базової символ «a» (U+0061) і модифікуючий символу « » (U+0301) або як монолітний символ «á» (U+00C1). Особливий тип модифікуючих символів — селектори варіанти накреслення (англ. variation selectors). Вони діють тільки на ті символи, для яких такі варіанти визначені. У версії 5.0 варіанти накреслення визначені для ряду математичних символів, для символів традиційного монгольського алфавіту і символів для монгольського квадратного листа. Графические символы в Юникоде подразделяются на протяженные и непротяженные (бесширинные). Непротяженные символы при отображении не занимают места в строке. К ним относятся, в частности, знаки ударения и прочие диакритические знаки. Как протяженные, так и непротяженные символы имеют собственные коды. Протяженные символы иначе называются базовыми (англ. base characters), а непротяженные — модифицирующими (англ. combining characters); причем последние не могут встречаться самостоятельно. Например, символ «á» может быть представлен как последовательность базового символа «a» (U+0061) и модифицирующего символа « » (U+0301) или как монолитный символ «á» (U+00C1). Особый тип модифицирующих символов — селекторы варианта начертания (англ. variation selectors). Они действуют только на те символы, для которых такие варианты определены. В версии 5.0 варианты начертания определены для ряда математических символов, для символов традиционного монгольского алфавита и символов для монгольского квадратного письма. NFC, англ. normalization form C («C» від англ. composition), форма нормалізації C — алгоритм, згідно з яким послідовно виконуються канонічна декомпозиція і канонічна композиція. Спочатку канонічна декомпозиція (алгоритм NFD) наводить текст до форми D. Потім канонічна композиція — операція, зворотна NFD, обробляє текст від початку до кінця з урахуванням наступних правил: символ S вважається початковим, якщо має клас модифікації рівний нулю згідно таблиці символів Юнікоду; у будь-якій послідовності символів, що починається з символу S, символ C блокується від S, лише якщо між S і C є який-небудь символ B, який або є початковим, або має однаковий або більший клас модифікації C. Це правило поширюється тільки на рядки, що пройшли канонічну декомпозицію; символ вважається первинним композитом, якщо має канонічну декомпозицію в таблиці символів Юнікоду (або канонічну декомпозицію для хангыля і він не входить до списку виключень); символ X може бути первинно поєднаний з символом Y, якщо і тільки якщо існує первинний композит Z, канонічно еквівалентний послідовності <X, Y>; якщо черговий символ C не блокується останнім встреченным початковим базовим символом L і він може бути успішно первинно суміщений з ним, то L замінюється на композит L-C, C видаляється. NFKD, англ. normalization form KD, форма нормалізації KD — сумісна декомпозиція — алгоритм, згідно з яким послідовно виконуються канонічна декомпозиція і заміни символів тексту за таблицями сумісної декомпозиції. Таблиці сумісної декомпозиції передбачають заміну на майже еквівалентні символів[35]: схожих на літери (ℍ і ℌ); обведених гуртками (①); з зміненими розмірами (カ і カ); повернених (︷ і {); ступенів (⁹ і₉); дробів (¼); інших (™). Стандарт Юнікод підтримує писемності мов як з напрямком написання зліва направо (англ. left-to-right, LTR), так і з написанням справа наліво (англ. right-to-left, RTL) — наприклад, арабське і єврейське лист. В обох випадках символи зберігаються в «природному» порядку; їх відображення з урахуванням потрібного напрямку письма забезпечується додатком. Крім того, Юнікод підтримує об'єднані тексти, що поєднують фрагменти з різним напрямком письма. Дана можливість називається двунаправленность (англ. bidirectional text, BiDi). Деякі спрощені обробники тексту (наприклад, в стільникових телефонах) можуть підтримувати Юнікод, але не мати підтримки двунаправленности. Всі символи Юнікоду поділені на кілька категорій: пишущиеся зліва направо, пишущиеся справа наліво, і пишущиеся в будь-якому напрямку. Символи останньої категорії (в основному це знаки пунктуації) при відображенні приймають напрямок навколишнього тексту. Юнікод включає практично всі сучасні писемності, в тому числі: арабську, вірменську, бенгальську, бірманську, глаголицю, грецьку, грузинську, деванагарі, єврейську, кирилицю, китайську (китайські ієрогліфи активно використовуються в японській мові, а також досить рідко в корейському), вірменську, бенгальську, бірманську, глаголицю, грецьку, грузинську, деванагарі, єврейську, кирилицю, китайську (китайські ієрогліфи активно використовуються в японській мові, а також досить рідко в корейському), коптську, кхмерську, латинську, тамільську, корейську (хангиль), черокі, ефіопську, японську (яка включає в себе крім китайських ієрогліфів ще й складове абетку), та інші. З академічними цілями додано багато історичні писемності, в тому числі: германські руни, древнетюркские руни, давньогрецька, єгипетські ієрогліфи, клинопис, писемність майя, етруська алфавіт. В Юнікод представлений широкий набір математичних і музичних символів, а також піктограм. В Юнікод принципово не включаються державні прапори, логотипи компаній і продуктів, хоча вони і зустрічаються в шрифтах (наприклад, логотип Apple в кодуванні MacRoman (0xF0) або логотип Windows шрифт Wingdings (0xFF)). У юнікодівськіх шрифтах логотипи повинні розміщуватися тільки в області користувальницьких символів. Консорціум Unicode працює в тісному зв'язку з робочою групою ISO/IEC/JTC1/SC2/WG2, яка займається розробкою міжнародного стандарту 10646 (ISO/IEC 10646). Між стандарту Юнікод і ISO/IEC 10646 встановлена синхронізація, хоча кожен стандарт використовує свою термінологію і систему документації. Співпраця Консорціуму Юнікоду з Міжнародною організацією по стандартизації (англ. International Organization for Standardization, ISO) почалося в 1991 році. У 1993 році ISO випустила стандарт DIS 10646.1. Для синхронізації з ним Консорціум затвердив стандарт Unicode версії 1.1, в який були внесені додаткові символи з DIS 10646.1. В результаті значення закодованих символів Unicode 1.1 та DIS 10646.1 повністю збіглися. Надалі співпраця двох організацій продовжилося. У 2000 році стандарт Unicode 3.0 був синхронізований з ISO/IEC 10646-1:2000. Майбутня третя версія ISO/IEC 10646 буде синхронізована з Unicode 4.0. Можливо, ці специфікації навіть будуть опубліковані як єдиний стандарт. Аналогічно форматів UTF-16 і UTF-32 в стандарті Unicode, стандарт ISO/IEC 10646 також має дві основні форми кодування символів: UCS-2 (2 байти на символ, аналогічно UTF-16) і UCS-4 (4 байти на символ, аналогічно UTF-32). UCS значить універсальний многооктетный (многобайтовый) кодований набір символів (англ. універсальний multiple-octet coded character set). UCS-2 можна вважати підмножиною UTF-16 (UTF-16 без сурогатних пар), а UCS-4 є синонімом для UTF-32. Відмінності стандартів Юнікод і ISO/IEC 10646: невеликі відмінності в термінології; ISO/IEC 10646 не включає розділи, необхідні для повноцінної реалізації підтримки Юнікоду: немає даних про двійковому кодуванні символів; немає опису алгоритмів порівняння (англ. collation) і відтворення (англ. rendering) символів; немає переліку властивостей символів (наприклад, немає переліку властивостей, необхідних для реалізації підтримки двонаправленого (англ. bi-directional) листи). Юнікод має кілька форм представлення (англ. Unicode transformation format, UTF): UTF-8, UTF-16 (UTF-16BE, UTF-16LE) і UTF-32 (UTF-32BE, UTF-32LE). Була розроблена форма подання UTF-7 для передачі по семибитным каналах, але із-за несумісності з ASCII вона не отримала поширення і не включена в стандарт. 1 квітня 2005 року були запропоновані дві жартівливі форми подання: UTF-9 і UTF-18 (RFC 4042). В Microsoft Windows NT і заснованих на ній системах Windows 2000 і Windows XP в основному використовується форма UTF-16LE. В UNIX-подібних операційних системах GNU/Linux, BSD і Mac OS X прийнята форма UTF-8 для файлів і UTF-32 або UTF-8 для обробки символів в оперативній пам'яті. Punycode — інша форма кодування послідовностей Unicode-символів у так звані ACE-послідовності, які складаються лише з алфавітно-цифрових символів, як це дозволено в доменних іменах. UTF-8 — представлення Юнікоду, що забезпечує найкращу сумісність зі старими системами, які використали 8-бітові символи. Текст, що складається лише з символів з номером менше 128, при записі в UTF-8 перетворюється в звичайний текст ASCII. І навпаки, в тексті UTF-8 будь байт із значенням менше 128 зображає символ ASCII з тим же кодом. Інші символи Юнікоду зображуються послідовностями довжиною від 2 до 6 байт (на ділі, тільки до 4 байт, оскільки в Юнікод немає символів з кодом більше 10FFFF, і вводити їх в майбутньому не планується), в яких перший байт завжди має вигляд 11xxxxxx, а решта — 10xxxxxx. В UTF-8 не використовуються сурогатні пари, 4-x байтів достатньо для запису будь-якого символу unicode. Формат UTF-8 був винайдений 2 вересня 1992 року Кеном Томпсоном і Робом Пайком і реалізований у Plan 9[36]. Зараз стандарт UTF-8 офіційно закріплений у документах RFC 3629 і ISO/IEC 10646 Annex D. Символи UTF-8 виходять з Unicode наступним чином: Unicode UTF-8: 0x00000000 — 0x0000007F: 0xxxxxxx 0x00000080 — 0x000007FF: 110xxxxx 10xxxxxx 0x00000800 — 0x0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 0x00010000 — 0x001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx Теоретично можливі, але не включені в стандарт також: 0x00200000 — 0x03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 0x04000000 — 0x7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx Незважаючи на те, що UTF-8 дозволяє вказати один і той же символ кількома способами, тільки найбільш короткий з них правильний. Інші форми повинні відхилятися з міркувань безпеки. У потоці даних UTF-16 молодший байт може записуватися або перед старшим (англ. UTF-16 little-endian), або після старшого (англ. UTF-16 big-endian). Аналогічно існує два варіанти четырехбайтной кодування — UTF-32LE і UTF-32BE. Для визначення формату подання Юнікоду на початок текстового файлу записується сигнатура — символ U+FEFF нерозривний пробіл нульової довжини), також іменований маркером послідовності байтів (англ. byte order mark (BOM)). Це дозволяє розрізняти UTF-16LE і UTF-16BE, оскільки символу U+FFFE не існує. Також цей спосіб іноді застосовується для позначення формату UTF-8, хоча до цього формату і незастосовне поняття порядку байтів. Файли, такі цією угодою, починаються з таких послідовностей байтів: UTF-8 EF BB BF UTF-16BE FE FF UTF-16LE FF FE UTF-32BE 00 00 FE FF UTF-32LE FF FE 00 00 На жаль, цей спосіб не дозволяє надійно розрізняти UTF-16LE і UTF-32LE, оскільки символ U+0000 допускається Юнікодом (хоча реальні тексти рідко починаються з нього). Файли у форматі UTF-16 і UTF-32, що не містять BOM, повинні мати порядок байтів big-endian (unicode.org). Впровадження Юнікоду призвело до зміни підходу до традиційних 8-бітним кодуванням. Якщо раніше кодування задавалася шрифтом, то тепер вона задається таблицею відповідності між даною кодуванням і Юнікодом. Фактично 8-бітні кодування перетворилися в форму представлення деякого підмножини Юнікоду. Це набагато спростило створення програм, які повинні працювати з безліччю різних кодувань: тепер, щоб додати підтримку ще одного кодування, треба всього лише додати ще одну таблицю перекодування в Юнікод. Крім того, багато формати даних дозволяють вставляти будь-які символи Юнікоду, навіть якщо документ записаний в старій 8-бітної кодуванням. Наприклад, в HTML можна використовувати коди з амперсандом. Більшість сучасних операційних систем в тій чи іншій мірі забезпечують підтримку Юнікоду. В операційних системах сімейства Windows NT для внутрішнього представлення імен файлів та інших системних рядків використовується двухбайтовая кодування UTF-16LE. Системні виклики, що приймають рядкові параметри, існують в однобайтному і двухбайтном варіантах. Докладніше див. у статті Юнікод в операційних системах Microsoft. UNIX-подібні операційні системи, у тому числі GNU/Linux, BSD, Mac OS X, використовують для подання Unicode кодування UTF-8. Більшість програм можуть працювати з UTF-8 як з традиційними однобайтными кодуваннями, не звертаючи уваги на те, що символ представляється як кілька послідовних байтів. Для роботи з окремими символами рядка зазвичай перекодуються в UCS-4, так що кожному символу відповідає машинне слово. Однією з перших успішних комерційних реалізацій Юнікоду стала середовище програмування Java. В ній принципово відмовилися від 8-бітного представлення символів на користь 16-бітного. Це рішення збільшувало витрати пам'яті, але дозволило повернути в програмування важливу абстракцію: довільний одиночний символ (тип char). Зокрема, програміст міг працювати з рядком, як з простим масивом. На жаль, успіх не був остаточним, Юнікод переріс обмеження в 16 біт і до використання J2SE 5.0 довільний символ знову став займати змінне число одиниць пам'яті — один char або два (див. сурогатна пара). Зараз більшість мов програмування підтримує рядки Unicode, хоча їх подання може відрізнятися в залежності від реалізації. Оскільки ні одна розкладка клавіатури не може дозволити вводити символи Юнікоду одночасно, від операційних систем і прикладних програм потрібна підтримка альтернативних методів введення довільних символів Юнікоду. Хоча починаючи з Windows 2000, службова програма «Таблиця символів» (charmap.exe) підтримує юнікодние символи і дозволяє скопіювати їх в буфер обміну, але ця підтримка обмежена тільки базовою площиною (коди символів U+0000-U+FFFF). Символи з кодами від U+10000 «Таблиця символів» не відображає. Схожа таблиця є, наприклад, у Microsoft Word. Іноді можна набрати шістнадцятковий код, натиснути Alt+X, і код буде замінений на відповідний символ, наприклад, WordPad, Microsoft Word. В редакторах Alt+X виконує зворотне перетворення. У багатьох програмах MS Windows, щоб отримати символ Unicode, потрібно, утримуючи клавішу Alt, набрати десяткове значення коду символу на цифровій клавіатурі. Наприклад, корисними при наборі кириличних текстів будуть комбінації Alt+0171 («), Alt+0187 (») і Alt+0769 (знак тупого наголосу). Цікаві також комбінації Alt+0133 (...) і Alt+0151 (—). У Mac OS 8.5 і пізніших версіях підтримується метод введення, званий «Unicode Hex Input». При затиснутій клавіші Option потрібно набрати чотиризначний шістнадцятковий код потрібного символу. Цей метод дозволяє вводити символи з кодами, великими U+FFFF, використовуючи пари сурогатів; такі пари операційною системою будуть автоматично замінені на одиночні символи. Цей метод введення перед використанням потрібно активізувати у відповідному розділі системних налаштувань і потім вибрати як поточний метод введення у меню клавіатури. Починаючи з Mac OS X 10.2, існує також додаток «Character Palette», що дозволяє вибирати символи з таблиці, в якій можна виділяти символи певного блоку чи символи, підтримувані конкретним шрифтом. У GNOME також є утиліта «Таблиця символів» (gucharmap), що дозволяє відображати символи певного блоку чи системи письма і надає можливість пошуку по назві або опису символу. Коли код потрібного символу відомий, його можна ввести у відповідності зі стандартом ISO 14755: при затиснутих клавішах Ctrl+⇧ Shift ввести шістнадцятковий код (починаючи з деякої версії GTK+, введення коду потрібно випередити натисканням клавіші «U»). Вводиться шістнадцятковий код може мати до 32 біт в довжину, дозволяючи вводити будь-які символи Юнікоду без використання сурогатних пар. Всі додатки X Window, включаючи GNOME і KDE, які підтримують введення за допомогою клавіші Compose. Для клавіатур, на яких немає окремої клавіші Compose, для цієї мети можна призначити будь-яку клавішу — наприклад, ⇪ Caps Lock. Консоль GNU/Linux також допускає введення символів Юнікоду по його коду — для цього десятковий код символу потрібно ввести цифрами розширеного блоку клавіатури при затиснутій клавіші Alt. Можна вводити символи та за їх шестнадцатеричному коду: для цього потрібно натиснути клавішу alt gr, і для введення цифр A—F використовувати клавіші розширеного блоку клавіатури від NumLock до ↵ Enter (за годинниковою стрілкою). Підтримується також і введення в відповідності з ISO 14755. Для того щоб перераховані способи могли працювати, потрібно включити в консолі Юнікоду викликом unicode_start(1) і вибрати відповідний шрифт викликом setfont(8). Mozilla Firefox для Linux підтримує введення символів за ISO 14755. В Юнікод англійське «a» і польське «a» — один і той же символ. Точно так само одним символом (але відрізняється від «a» латинського) вважаються російське «а» і сербський «а». Такий принцип кодування не універсальний; мабуть, рішення «на всі випадки життя» взагалі не може існувати. Тексти на китайській, корейській і японській мовах мають традиційне написання зверху вниз, починаючи з верхнього правого кута. Перемикання горизонтального і вертикального написання для цих мов не передбачено в Юнікод — це повинно здійснюватися засобами мов розмітки або внутрішніми механізмами текстових процесорів. Юнікод передбачає можливість різних накреслень одного і того ж символу в залежності від мови. Так, китайські ієрогліфи можуть мати різні зображення в китайському, японському (кандзі) та корейською (ханче), але при цьому в Юнікод позначаються одним і тим же символом (так звана CJK-уніфікація), хоча спрощені і повні ієрогліфи все ж мають різні коди. Аналогічно, російська і сербська мови використовують різне накреслення курсивных букв п і т (у сербському вони виглядають як і і ш, див. сербський курсив). Тому потрібно стежити, щоб текст завжди був правильно позначено як відноситься до того чи іншого мови. Переклад з літер в заголовні теж залежить від мови. Наприклад: в турецькому існують букви Ii і Iı — таким чином, турецькі правила зміни регістру конфліктують з англійськими, які наказують «i» переводити в «I». Подібні проблеми є і в інших мовах, наприклад, у канадському діалекті французької мови регістр перекладається трохи не так, як у Франції[37]. Навіть з арабськими цифрами є певні позначки тонкощі: цифри бувають «великими» і «малими», пропорційними і моноширинним[38] — для Юнікоду різниці між ними немає. Подібні нюанси залишаються за програмним забезпеченням. Деякі недоліки пов'язані не з самим Юнікодом, а з можливостями обробників тексту. Файли неанглійської тексту в кодуванні Юнікод завжди займають більше місця, так як один символ кодується не одним байтом, як у різних національних кодуваннях, а послідовністю байтів (виняток становить UTF-8 для мов, алфавіт яких укладається в ASCII, а також наявність в тексті символів двох і більше мов, алфавіт яких не вкладається в ASCII[39]). Файл шрифту, необхідний для відображення всіх символів таблиці Юнікод, займає порівняно багато місця в пам'яті і вимагає великих обчислювальних ресурсів, ніж шрифт тільки однієї національної мови користувача[40]. Зі збільшенням потужності комп'ютерних систем і здешевленням пам'яті і дискового простору ця проблема стає дедалі менш суттєвою; тим не менш, вона залишається актуальною для портативних пристроїв, наприклад, для мобільного телефону. Хоча підтримка Юнікоду реалізована в найбільш поширених операційних системах, до цих пір не все прикладне програмне забезпечення підтримує коректну роботу з ним. Зокрема, не завжди обробляються мітки порядку байтів (BOM) і погано підтримуються діакритичні знаки. Проблема є тимчасовою і є наслідок порівняльної новизни стандартів Юнікоду (в порівнянні з однобайтовыми національними кодуваннями). Продуктивність всіх програм обробки рядків (в тому числі і сортувань в БД) знижується при використанні Юнікоду замість однобайтових кодувань. Деякі рідкісні системи письма все ще не представлені належним чином в Юнікод. Зображення «довгих» надрядкових символів, що простягаються над кількома літерами, як, наприклад, в церковнослов'янській мові, поки не реалізовано. «Unicode» — одночасно і власне ім'я (або частина імені, наприклад, Unicode Consortium), і загальне ім'я, що походить з англійської мови. На перший погляд краще використовувати написання «Унікод». У російській мові вже є морфеми «уні-» (слова з латинським елементом «uni-» традиційно переводилися і писалися через «уні-»: універсальний, уніполярний, уніфікація, уніформа) і «код». Навпаки, торгові марки, запозичені з англійської мови, звичайно передаються за допомогою практичної транскрипції, у якій деэтимологизированное поєднання букв «uni-» записується у вигляді «юні-» («Юнілевер», «Юнікс» тощо), тобто точно так само, як у випадку з побуквенными скороченнями, начебто UNICEF «United Nations International children's Emergency Fund» — ЮНІСЕФ. Написання «Юнікод» уже твердо увійшло в російськомовні тексти. У Вікіпедії використовується більш поширений варіант. В MS Windows використовується варіант «Юнікод». На сайті Консорціуму є спеціальна сторінка, де розглядаються проблеми передачі слова «Unicode» в різних мовах і системах письма. Для російської кирилиці зазначений варіант «Юнікод»[1]. Форми, прийняті іноземними організаціями для російської передачі слова «Unicode», є рекомендаційними. | |
|
Всего комментариев: 0 | |