Що таке кодування Unicode




Що таке кодування Unicode



Що таке Unicode, UTF-8 та ASCII?

У цій статті ми поговоримо про те, як кодується текст у сучасних комп'ютерах, а також про такі поняття, як Unicode, UTF-8 та ASCII (І не тільки).

Це запис слідами відеоуроку, який можна знайти на YouTube:

Цей запис також доступний у каналі Telegram “DEV: Рубінові тони”, а обговорити цю тему можна в нашому чаті Telegram. Статтю написано з використанням керівництва Джоеля Спольського.

Навіщо потрібні кодування?

Люди говорять, думають і пишуть природними мовами, багато з яких розвивалися протягом століть. Звичайно, і у світі IT ми хотіли б працювати з текстовою інформацією у звичному вигляді, але проблема полягає в тому, що сучасні комп'ютери розуміють лише нулики та одиниці: так – ні, правда – брехня, є сигнал – немає сигналу. Втім, часто й людям теж простіше мислити категоріями "погано - добре", а не розумітися на "градаціях сірого" якогось явища (про те, до чого це іноді призводить, я тут міркувати не буду). Так чи інакше, наші тексти потрібно якимось чином зберігати у цифровому вигляді, і сьогодні ми спробуємо зрозуміти які для цього використовуються підходи.

Розбиратися у всьому цьому справді корисно, тому що різних мов у світі дуже багато, питання інтернаціоналізації (про те, що це таке, я писав в іншій статті) та локалізації дуже актуальне.

Стандарт ASCII

Як працює ASCII?

Перенесемося в стародавні часи, на сорок років тому, коли була написана перша версія книги про мову C, а світ взагалі був простіше, трава зеленіша, та й пиво не розбавляли. Основну увагу тоді приділяли звичайним латинським символам без усяких вишукувань, тобто без умляутів та іншого.Для них використовувався стандарт кодування ASCII (American Standard Code for Information Interchange), який спочатку з'явився ще у 60-якомусь бородатому році.

Суть цього стандарту проста: кожну букву можна закодувати якимось цілим невід'ємним числом, наприклад "A" - це 65, "B" - 66, і так далі. Це можна перевірити і зараз, наприклад написавши "A".ord в Ruby (хоча тут є особливість, про це пізніше). До речі, зауважимо, що тип char в C — це просто ціле число. Так ось, кожна буква латинського алфавіту і деякі інші символи типу знаків оклику / запитань, математичних операторів та іншого, кодувалися числами від 32 до 127. Це, ясна річ, чудово влазило в сім біт. Ну, а оскільки комп'ютери оперували і вісьмома бітами без жодних проблем, то залишався ще цілий вільний біт, за допомогою якого можна було втілити в життя найпотаємніші фантазії.

Коди від 0 до 31 включно використовувалися для будь-яких темних справ і називалися “контрольні символи” (aka “недруковані”). Наприклад, один із символів міг змусити комп'ютер пищати в самому прямому сенсі, інший означав табуляцію, і так далі (про \n, \t та інші штуки, думаю, всі знають). Знайти список усіх кодів можна в Інтернеті.

Використання ASCII для різних алфавітів

Загалом все працювало чудово, але тільки для тих, хто використовував англійську мову. Звичайно, багатьом спала на думку проста думка: "Раз коди від 128 до 255 ні для чого не використовуються, то їх можна задіяти під будь-що!". На жаль, поняття "що завгодно" у всіх різне. Так, в IBM-PC ці коди виводили на екран всякі рисочки, загогуліни та символи квадратного кореня (ось тут весь набір).В інших системах ситуація могла бути зовсім інший, і це часто призводило до всяких неприємностей. Наприклад, якщо на деяких комп'ютерах код 130 виводив é, то на комп'ютерах, що продаються в Ізраїлі, це число кодувало букву гімель ג. Виходило, що документ, складений у США і відправлений до Ізраїлю, міг неправильно виводитися на тамтешніх комп'ютерах (згадаймо про таке слово, як “résumé”).

З кириличними символами також була ціла історія. На зльоті СРСР було прийнято ГОСТ, який вводив кодування КОІ8, сумісну з ASCII, а вигадав її метр Чернов, який, на жаль, помер кілька років тому. КОИ8 задіяла "зайві" коди з 128-го. Були різновиди цього кодування, наприклад, KOI8-RU, призначений одразу для російської, української та білоруської мов.

Стандарт ANSI

У результаті весь цей хаос із “зайвими” кодами було вирішено хоч трохи впорядкувати. Так з'явився стандарт ANSI (American National Standards Institute), Що чітко зафіксував, що означають коди з 0 по 127, хоча, чесно кажучи, це і так в основному дотримувалося. А ось з кодами від 128 і далі надійшли цікаво, ввівши таку штуку, як кодові сторінки (cp, кодові сторінки). У таких сторінках зашивалися як звичайні латинські символи, так і нестандартні літери алфавіту тієї країни, де ви знаходитесь. Тому на території колишнього СРСР багато хто любив кодування "windows cp 1251" саме тому, що 1251 - це номер відповідної сторінки з кириличними символами. В Ізраїлі для івриту використовувалася сторінка 1255, у Греції - 1253, і так далі, таких таблиць було вище даху.Деякі сторінки могли використовуватися відразу для кількох мов, але це скоріше виняток.

Проблема з таким новаторським підходом у тому, що одночасно можна використовувати лише одну сторінку, тобто працювати по-людськи відразу, наприклад, з російською мовою та івритом на одному комп'ютері було нереально. Ну, хіба що писати власну програму та відображати деякі символи у якомусь хитрому вигляді.

В Азії ж взагалі панував треш і чад, тому що в тамтешніх країнах використовуються різноманітні ієрогліфи і всякі складні закарючки, яких існує близько 9000 — ясна річ, що в 8 біт це ніяк не вмістити. Доводилося йти на будь-які хитрощі і зберігати деякі символи у вигляді одного байта, а деякі - у вигляді двох, що дуже ускладнювало роботу з рядками (наприклад, не цілком зрозуміло, як рухатися в рядку назад). Так, звичайно, для цього існували допоміжні функції, але в цілому ситуація була так собі. Тим більше, що активно розвивався інтернет, тексти передавалися з комп'ютера на комп'ютер, і треба було цей бардак якось розгрібати.

Стандарт Unicode

Тоді з'явився Unicode, стандарт, мета якого була ввести єдине кодування для всіх алфавітів, які використовуються на планеті (ніяких клінгонських мов там спочатку, мабуть, не планувалося, але в цілому можна додати їх також).

Підхід Unicode суттєво відрізнявся від того, що було раніше. Як ми вже з'ясували, в ASCII ситуація проста: є буква "A" латинського алфавіту і є її уявлення у вигляді бітів 0100 0001 все просто.У Unicode ж букві зіставляється code point (кодова точка), що у свою чергу має певне уявлення у пам'яті чи диску, і це уявлення чітко не регламентовано.

Літери та їх зовнішній вигляд

Перш ніж рухатися далі, є один важливий момент, який слід усвідомити. Ми розуміємо, що латинська літера "A" - це не те саме, що латинська "B". Відрізняється вона і від малої літери "a", так? Але при цьому латинська "А", написана курсивом або напівжирним шрифтом, - це те саме, що просто латинська "A". Більше того, "А", написана шрифтом Arial, нічим із змісту не відрізняється від "А", написаної Helvetica. Чи означає це, що будь-які "прикраси" не важливі і їх можна не позначати? Взагалі, ні.

Думаю, багато хто знає, що у німецькій мові є символ ß. І це зовсім не "гарна літера B", а дві літери "s". У латиській мові є буква ķ, але це зовсім не звичайна латинська “k” з рисою для краси, а окрема буква. Тому "кіт" буде саме "kaķis" ("катіс", а не те, що ви подумали). Більше того, в івриті здавалося б одна й та сама буква, написана в різних місцях та в різному “стилі”, може мати різне значення. Значить, інформацію про "краси" теж потрібно зберігати!

Загалом, ситуація з мовами та алфавітами значно складніше, ніж здається. Саме тому робоча група Unicode витратила цілу купу часу на пошуки рішення, тим більше, що тут є політичні моменти, але нас це мало цікавить.

Принцип роботи Unicode

Суть цього стандарту така.Кожній "звичайній букві без особливих надмірностей", тобто звичайним "A", "B", і так далі, були присвоєні спеціальні "магічні числа", що записуються у вигляді U +1234. Це магічне число — кодова точка, U — ясна річ, Unicode, а самі цифри — шістнадцяткові. Всі ці кодові точки можна знайти на сайті Unicode, наприклад, U+00BF — це такий перевернутий питання, що використовується в іспанській мові.

Щоправда, дещо складніше, тому що Unicode дозволяє модифікувати символи та отримувати нові комбінації. Тобто до “просто букв” можна додавати комбіновані діакритичні знаки та акценти (типовий приклад – знак наголосу). Хоча для багатьох комбінацій вже є готові коди, можна збирати нові символи самостійно. Грубо кажучи, якщо взяти букву "е" і приліпити до неї дві точки, вийде "е". Ну, а букву “é” можна представити як U+0065 (звичайна латинська “e”) та U+0301 (акцент, що застосовується до попередньої букви). В принципі, це означає, що з будь-якої “нормальної” літери можна отримати дивного монстра Франкенштейна.

За фактом, жодної строгої межі на кількість символів в Unicode немає, хоча деяка частина влазить у розмірність 2 байти (тобто 65 536 штук). Взагалі, валідних кодових точок Unicode зараз близько 1112064, тому історія про те, що Unicode оперує тільки двома байтами - міф.

Кодування UTF-16

Інше цікаве питання полягає в тому, як ці кодові точки повинні бути представлені в пам'яті або в повідомленнях (у тих же електронних листах), оскільки сам стандарт це не регламентує. Для цього використовуються кодування.

Перша ідея була дуже простою — давайте зберігати ці шістнадцяткові числа у двобайтовому вигляді! Тоді рядок “Hello” буде представлений як U+0048 U+0065 U+006C U+006C U+006F, а в пам'яті – просто як 00 48 00 65 00 6C 00 6C 00 6F. Називається такий підхід UCS-2 (бо байта два, повідомляє cpt. Obvious) або UTF-16 (так-так, тому що 16 біт). Власне, звідси й пішов міф, що в Unicode може бути лише два байти, не більше. Тобто байта два, але тільки в конкретному кодуванні, що реалізує стандарт.

Але, з іншого боку, рядок "Hello" можна написати і в іншому вигляді, переставивши байти місцями: 48 00 65 00 6C 00 6C 00 6F 00 . Іншими словами, можна використовувати варіант little-endian або big-endian — тут уже в залежності від того, з чим зручніше працюватиме процесору. Виходить, форм зберігання вже принаймні дві! Як їх розрізняти? Тоді було запропоновано на початок кожного рядка додавати таку штуку як Unicode Byte Order Mark (тобто мітку, що повідомляє про порядок проходження байтів). Вона виглядала як FE FF або FF FE (у другому випадку це означає, що байти потрібно переставити місцями).

Потім очікувано запитали й інше питання: а чого нам зберігати всі ці зайві нулі? Це особливо актуально для англомовних розробників, які використовували в основному коди до U+00FF . З їхньої точки зору виходило, що для зберігання рядків доводиться витрачати вдвічі більше місця незрозуміло навіщо. Це не кажучи про те, що з часів дідуся залишилася гора документів в ANSI і ще бог знає в чому, і нікому не хотілося це все конвертувати. Коротше, до якогось моменту Unicode не набував поширення, але годинники оглушливо цокали, і ситуація ставала гіршою.

Кодування UTF-8

Тоді в 2003 році придумали концепцію UTF-8, яку пропонувалося використовувати для зберігання рядків Unicode (тобто Unicode != UTF8). Як підказує цифра 8, автори запропонували зберігати дані в октетах (байтах), але їх кількість варіюється в залежності від кодової точки. Іншими словами, від U+0000 до U+007F (від 0 до 127) використовується лише один байт, від U+0080 до U+07FF – два байти, і таке інше. Максимум - 4 байти інформації, що дозволяє закодувати весь мільйон з хвостиком кодових точок, що є на даний момент.

Це дуже зручно для документів у кодуванні US-ASCII (United States), в яких використовуються символи до U+007F, тобто кожен символ кодується одним байтом. З цього випливає, що такі документи виглядають однаково, що в ASCII, що в Unicode, тобто 65 - це "А" в обох випадках. Тому насправді "A".ord у Ruby поверне код літери для UTF8 ("A".encoding майже напевно повідомить саме UTF8, у всякому разі, на будь-якій нормальній системі).

Так, невелика проблема полягає в тому, що решті світу все одно довелося підлаштовуватися під новий стандарт, але що вдієш, ka ir tas ir. Заради справедливості, англійська — мова міжнародного спілкування плюс програми теж пишуться латинськими літерами.

Таким чином, з'явилося вже два кодування: UTF16 та UTF8. Тільки в одній кожен символ займав по 2 байти і треба було розбиратися, в якій послідовності ці байти записані, а в іншій багато "звичні" літери займали всього байт. Нескладно здогадатися, яке кодування набуло великої популярності.

Unicode та його численні кодування

До речі, це єдині варіанти. Був такий звір як UTF7, схожий на UTF8, але який гарантував, що старший біт завжди міститиме нуль.Це було зроблено, щоб текстові повідомлення, надіслані через деякі дивні поштові системи, доходили по-нормальному (інакше там могло бути таке, що частина інформації обрізалася). Був і UCS4 (за фактом, UTF32), який зберігав дані по 4 байти, але це здавалося занадто великим марнотратством.

Власне, тепер ми розуміємо, що всяких кодувань справді вигадали неабияку кількість. Звідси ростуть ноги у таємничих знаків запитання, які можна періодично зустріти в деяких випадках - це символи, які в даному кодуванні не вдається відобразити. Грубо кажучи, можна взяти будь-яку кодову точку з Unicode і спробувати відобразити в ASCII, але далеко не для всіх чисел вдасться знайти відповідність, що призведе до появи веселих знаків запитання.

Кодування потрібно шанувати

З усього цього виходить цікавий висновок: рядок фактично не матиме жодного сенсу, якщо ми не знаємо, яке кодування воно використовує. Хоча ми все одно використовуємо термін "plain text", він виявляється досить розмитим, тому що неясно в якомусь кодуванні він "plain". Якщо у ньому використовуються будь-які символи після 127, то ASCII тут теж допоможе. Саме тому при створенні веб-сторінок у тезі meta ми пишемо кодування (а якщо не пишемо, то варто було б це робити) - аналогічна історія з листами.

До речі, із веб-сторінками взагалі дуже цікава штука. Спочатку планувалося, що кодування повідомлятиме веб-сервер при відправці HTML. Але ж на одному сервері може лежати величезна кількість сторінок і сайтів, що використовують різні мови. Значить, краще, щоб сама веб-сторінка говорила, що вона має за кодування.Але, дозвольте, як тоді нам цю сторінку почати читати, якщо ми не маємо уявлення про її кодування? Виходить замкнуте коло: щоб прочитати сторінку, потрібно знати кодування, а щоб знати кодування, потрібно почати читати сторінку.

На щастя, на початку HTML-файлу ми зазвичай використовуємо “стандартні” коди до 127, а meta розташовується на самому початку документа, так що її можна обробити без проблем, а потім вже використовувати зазначене кодування. Якщо ж meta немає, то деякі браузери можуть намагатися "вгадати" кодування за допомогою аналізу "нестандартних" символів, але іноді це може призвести до того, що замість кириличних символів вилізуть якісь китайські ієрогліфи. Тому, пані та панове, ми з вами повинні шанувати кодування.

Що таке Unicode?

Unicode - це унікальний код для будь-якого символу,
незалежно від платформи,
незалежно від програми,
незалежно від мови.

За своєю природою комп'ютери можуть працювати лише з числами. І для того, щоб вони могли зберігати в пам'яті літери або інші символи, кожному такому символу має бути поставлене у відповідність число. До того, як з'явився Unicode, у світі мали ходіння сотні різних схем такого кодування символів. Але жодна з цих схем не була настільки універсальною, щоб описати всі необхідні символи: наприклад, тільки для кодування літер, що входять до алфавітів мов Європейського Співтовариства, необхідно було використати кілька різних кодувань. За великим рахунком навіть для окремої мови, скажімо, англійської, не існувало єдиної системи кодування, що включала всі зазвичай використовувані літери, знаки пунктуації і технічні символи.

Більш того, всі ці схеми кодування часто навіть не сумісні один з одним.Наприклад, два різні кодування могли використовувати один і той же код для представлення двох різних символів або надавати різні коди однієї і тієї ж букве. У цій ситуації для будь-якого комп'ютера, а особливо сервера, доводилося підтримувати кілька різних кодувань, які могли знадобитися, але навіть і при передачі даних на іншу платформу або при їх перетворенні на інше кодування завжди залишався ризик, що ці дані будуть пошкодженими.

Unicode змінює такий стан речей!

Система Unicode присвоює унікальний код будь-якому символу, незалежно від платформи, незалежно від програми, незалежно від мови. та й багатьма іншими. Саме ця схема кодування використовується такими сучасними технологіями та стандартами, як наприклад XML, Java, ECMAScript. (JavaScript), LDAP, CORBA 3.0, WML і так далі. Саме Unicode є офіційною схемою реалізації ISO/IEC 10646. Нарешті, це кодування підтримується у багатьох операційних системах, у всіх сучасних браузерах Інтернет і у великій кількості інших програм. Unicode так само як і доступність підтримують його в даний час є одними з найбільш Важливих напрямів розвитку промисловості програмного обеспечения.

Використання Unicode у багаторівневих додатках або програмних комплексах, побудованих в рамках архітектури клієнт-сервер, а також при поданні даних в мережі Інтернет, призводить до значного зниження витрат на підтримку цих продуктів або сервісів у порівнянні з використанням старих схем кодування.Справді, Unicode дозволяє створювати єдиний програмний продукт або веб-сайт Інтернет для безлічі платформ, мов і країн без будь-яких переробок. А його використання під час передачі даних між різними системами оберігає ці дані від пошкодження.

Що таке Unicode Consortium?

Unicode Consortium - це некомерційна організація, заснована на розроблення та розвитку стандарту Unicode, визначального подання текстової інформації у сучасних програмних продуктах і стандартах, й у сприяння його широкого поширення і використання. Членами Консорціуму є велика кількість корпорацій та організацій, що працюють у галузях обробки інформації та комп'ютерної індустрії. Фінансова підтримка Консорціуму здійснюється виключно за рахунок членських внесків його учасників. Членство в Unicode Consortium відкрите для будь-яких організацій або приватних осіб, які підтримують стандарт Unicode та бажають допомагати його розповсюдженню та реалізації.

Щоб отримати подальшу інформацію, дивись словник термінів, приклади продуктів, які підтримують Unicode, введення в стандартну техніку або колекцію корисних ресурсів.

Russian translation by Antony Upensky

Кодування "Юнікод": стандарт кодування символів з описом

Юнікод – це універсальний стандарт кодування текстової інформації різними мовами. Завдяки Юнікоду, в одному документі можна комбінувати текст на кирилиці, латиниці, івриті, арабській мові та інших писемностях.

Історія створення стандарту Юнікод

Наприкінці 1980-х років гостро постало питання про єдиний стандарт кодування тексту. Існувала безліч 8-бітових кодувань, що постійно з'являлися нові. Це створювало такі проблеми:

  • Обмеженість набору символів в одному кодуванні
  • Складність перетворення тексту з одного кодування на інше
  • Дублювання шрифтів для різних кодувань

Було ухвалено рішення про створення універсального «широкого» 16-бітного кодування, що охоплює символи всіх відомих систем листа. Так 1991 року з'явився стандарт Юнікод (Unicode), розроблений консорціумом Unicode Consortium.

Спочатку в Юнікоді планувалося закодувати лише найбільш уживані символи, а більш рідкісні розмістити у спеціальній області. Однак пізніше було прийнято рішення кодувати всі символи.

З 1993 року ведеться співпраця Unicode Consortium з Міжнародною організацією зі стандартизації (ISO) із синхронізації стандарту Юнікод та стандарту ISO/IEC 10646.

Принципи влаштування Юнікоду

Кодування Юнікод складається з двох частин:

  1. Універсальний набір символів (UCS), який перераховує всі допустимі символи.
  2. Сімейство кодувань (UTF), що визначають способи запису цих символів.

Кодовий простір Юнікод розбитий на 17 площин по 65 536 позицій у кожній. Перша нульова площина є базовою і містить найбільш уживані символи. Всього в Юнікоді можна закодувати до 1112064 символів.

Для позначення кодів використовується запис виду:

U+xxxx - для кодів від 0 до 65535 (4 шістнадцяткові цифри)

Наприклад, код російської літери "а" має позначення U+0430.

Символи в Юнікоді поділяються на базові та комбінуючі. Останні (наприклад, символи наголосу) йдуть за базовим символом і змінюють його відображення. Завдяки комбінуючим символам, той самий символ можна закодувати різними послідовностями кодів.

Види текстових даних у Юнікоді

У Юнікоді розрізняють графічні символи, що мають видиме зображення, та керуючі, що використовуються для кодування різних функцій.

Графічні символи включають:

  • Літери
  • Цифри
  • Знаки пунктуації
  • Математичні та музичні символи
  • Ідеограми та логограми (наприклад, ієрогліфи)

Керуючі символи використовуються для перекладу рядка, табуляції та інших функцій.

Як було сказано вище, в Юнікоді є складові та монолітні символи. Приклад складеного символу на кирилиці – це буква "Й", яку можна закодувати як:

Монолітний еквівалент цього символу має код U+0419.

Існування складових символів призводить до проблеми порівняння рядків в Юнікод. Для вирішення цієї проблеми у стандарті визначено алгоритми нормалізації тексту (NFC, NFKC та ін.), що уніфікують подання символів.

Письменності, представлені в Юнікоді

Кодування включає практично всі сучасні системи письма, у тому числі:

  • Кирилиця
  • Латиниця
  • Грецька абетка
  • Арабський лист
  • Іврит

Крім того, для академічних цілей додано багато історичних писемностей:

  • Клинопис
  • Ієрогліфи майя
  • Давньоєгипетські ієрогліфи
  • Німецькі руни

Юнікод також містить різноманітні математичні, музичні та інші символи.

Для кодування прапорів країн використовуються спеціальні пари літер регіональних індикаторів.

Формати представлення Юнікоду

Для зберігання кодів символів Юнікоду використовуються різні формати представлення даних або кодування UTF (Unicode Transformation Format). Найбільш поширені:

  • UTF-8 – змінна довжина кодування (від 1 до 4 байт за символ). Забезпечує сумісність із 7-бітовим кодуванням ASCII.
  • UTF-16 – використовує 16-бітові коди, що прямо відповідають кодам Юнікоду в діапазоні U+0000. U+FFFF. Для інших знаків використовуються сурогатні пари (2 коди по 16 біт).
  • UTF-32 – кожен символ кодується 4 байтами.

Для UTF-16 та UTF-32 визначені варіанти з прямим (BE) та зворотним (LE) порядком байтів. Часто на початку тексту міститься спеціальний маркер, що визначає формат Юнікоду.

Введення довільних символів Юнікоду

Оскільки неможливо одночасно відобразити на клавіатурі все різноманіття символів Юнікод, існують спеціальні методи введення довільних символів за їх кодами.

В операційних системах Windows та Mac OS передбачено введення шістнадцяткового коду символу за допомогою клавіатурних комбінацій. У Linux можна також використовувати стандарт ISO 14755 та вводити код Ctrl+Shift+U, а потім шістнадцяткові цифри.

Багато ОС є «Таблиця символів» - додаток, що відображає символи певної писемності чи кодового діапазону, з якого можна скопіювати потрібний символ.

Підтримка Юнікоду в програмах та ОС

У сучасних операційних системах реалізовано підтримку Юнікоду.

У Windows NT та наступних для зберігання рядків використовується кодування Юнікод UTF-16LE. У UNIX-подібних ОС (Linux, macOS, BSD) прийнято формат UTF-8.

Мова програмування Java спочатку була повністю заснована на 16-бітових символах Юнікоду, проте пізніше була додана підтримка кодів за межами перших 65536 позицій.

В Інтернет за необхідності можна вставляти будь-які символи Юнікоду, використовуючи HTML-коди формату .

Переваги Юнікоду

Головна перевага універсального стандарту кодування Юнікод – це можливість подання текстів різними мовами та писемностями в єдиному форматі. Це спрощує перенесення даних між різними системами та програмами.

Кодування за правилами Юнікоду також заощаджує пам'ять, оскільки для всіх шрифтів використовується загальна таблиця символів.

Перекодування з одного 8-бітного кодування в інше стає простіше - достатньо задати таблиці відповідності символів кодування Юнікоду.

Недоліки та обмеження

Основна складність полягає у повній підтримці історичних систем письма, що рідко використовуються. Не для всіх особливостей листа знайдено універсальне рішення кодування Юнікод.

Не всякий обробник текстів може коректно працювати з двонаправленими текстами, сурогатними парами та інші складними варіантами кодування символів.

Кодування Юнікод та можливості передачі даних

Завдяки наявності різних форматів представлення стандарт кодування Юнікод дозволяє ефективно передавати текстову інформацію залежно від каналу зв'язку та обсягу даних.

Для передачі невеликих текстових повідомлень зручний компактний UTF-8. А UTF-32, навпаки, надмірна за розміром, зате забезпечує простоту доступу до окремих символів.

При передачі повідомлення вузьким каналом зв'язку є сенс перетворити текст на UTF-8, або у крайньому випадку, на UTF-16. Це дозволить скоротити обсяг даних порівняно з UTF-32.

Мови програмування та Юнікод

Підтримка Юнікод вбудована в багато популярних мов програмування. Наприклад, у Python 3 рядки зберігаються у форматі UTF-8. Є зручні функції для роботи з Юнікод-рядками.

У PHP також можна легко отримати символ за кодом Юнікод або вивести коди символів рядка. Перетворення 8-бітних рядків на UTF-8 виконується автоматично.

// PHP $text = "Приклад тексту"; echo mb_detect_encoding($text); // UTF-8 echo ord($text[0]); // U+041f

Мова Сі не має вбудованих Юнікод-рядків. Але підтримку Юнікод можна додати за допомогою спеціальних бібліотек, наприклад ICU (International Components for Unicode).

Перспективи розвитку Юнікоду

Хоча в кодуванні Юнікод вже представлена ​​переважна більшість письмовостей, що активно використовуються, робота з розширення стандарту триває.

Зокрема, ведеться додавання історичних систем письма, що рідко застосовуються, уточнюються правила кодування окремих мов, удосконалюються алгоритми нормалізації тексту.

У майбутньому очікується повнішої підтримки складних особливостей стародавніх писемностей на кшталт ієрогліфічного листа майя або лінійного листа Б.

Проблеми локалізації

Незважаючи на те, що Юнікод об'єднує більшість писемностей, він не вирішує всіх питань локалізації текстів.

У різних країнах для однієї мови можуть бути відмінності у алфавіті, правилах транслітерації імен, наборі спеціальних символів.

Тому при адаптації текстів для конкретних регіонів потрібно враховувати додаткові нюанси за межі уніфікації кодування Юнікод.

Розширення підтримки рідкісних писемностей

Незважаючи на те, що в Юнікод вже включена переважна більшість систем листа, що активно використовуються, робота з розширення стандарту триває. Зокрема, ведеться додавання історичних писемностей, що рідко застосовуються.

Наприклад, в останніх версіях Юнікоду з'явилися символи готичного алфавіту, додаткові знаки арабського листа, що використовувалися в середньовічних рукописах, а також символи низки маловідомих індійських абугід.

Поліпшення алгоритмів обробки тексту

Крім розширення складу підтримуваних символів, у стандарті Юнікод проводиться робота з удосконалення програмних алгоритмів до роботи з текстом.

Це стосується насамперед алгоритмів нормалізації тексту.Наприклад, в останній версії уточнено правила приведення до канонічного вигляду складних символів з діакритикою у низці східних писемностей.

Уніфікація національних варіантів писемності

Хоча базові літери різних алфавітів вже уніфіковані в рамках Юнікоду, є складнощі з урахуванням національних та локальних особливостей письма.

Так, не у всіх країнах використовується той самий набір символів кирилиці або латиниці. Можуть відрізнятися правила транслітерації імен та назв.

Для вирішення цієї проблеми ведеться узгодження єдиних правил адаптації алфавітів до національних вимог у рамках Юнікоду.

Стандартизація ідентифікаторів та метаданих

Крім зберігання текстової інформації, Юнікод дозволяє кодувати різні види допоміжних даних, таких як ідентифікатори або метадані.

Сюди відносяться, наприклад, мітки мови або регіону, інформація про направлення тексту, ідентифікатори шрифтів тощо.

Для стандартизації подібних даних також розробляються відповідні схеми кодування у межах загального стандарту Юнікод.

Розширена підтримка у прикладних програмах

Окрім удосконалення самого стандарту Юнікод, важливим завданням є покращення його підтримки у різних додатках – текстових та графічних редакторах, браузерах, операційних системах тощо.

Це стосується насамперед коректної роботи зі складними особливостями Юнікод-текстів – сурогатними парами, комбінуючими символами, різними правилами написання.

Схожі статті

  • Що таке Ципру
  • Що таке режим Atti для дронів Drones Cameras
  • Що таке Адамове яблуко у чоловіків
  • Що таке добори на міжкімнатні
  • Що таке дека на газонокосарці
  • Що таке код помилки 601
  • Що таке Жилка яловича
  • Що таке фонетична норма
  • Недавні статті

  • Як бродить зернова брага
  • Що робити якщо не засмагаєш на сонці чому засмага погано лягає на шкіру або перестає прилипати
  • Як швидко зняти гель лак без апарату
  • Як робиться Каті голови
  • Яка гребінець краще для об'єму
  • Чим роблять м'яку покрівлю
  • Чи можна залишати крем для обличчя на ніч
  • Де знаходиться датчик селектора
  • географія нашої діяльності
    вулиця Драгоманова, 27
    вул. Курчатова 1Б
    вул. Міцкевича 130
    вул. Лабунського, 1
    вул. Макарова-Пржевальського
    вул. Толстого 10
    вул. Грушевського 28
    вул. Перший промінь (Черняхівського)
    напишіть нам

    сообщение успешно отправлено
    x