- Скрипты
- Самолеты
- Кодовые единицы измерения
- Графемы
- Символы
- Последовательности
- Нормализация
- Смайлики
- Первые 128 символов
- Кодировки Юникода
- UTF-8
- UTF-16
- UTF-32
Юникод – это отраслевой стандарт для последовательного кодирования письменного текста .
Существует множество наборов символов, используемых компьютерами, но Юникод – первый в своем роде, нацеленный на поддержку всех письменных языков на земле (и за ее пределами!).
Его цель – предоставить уникальный номер для идентификации каждого символа для каждого языка на любой платформе.
Юникод сопоставляет каждый символ с определенным кодом, называемым кодовая точка . Кодовая точка принимает форму U+<шестнадцатеричный код> , начиная от U+0000 до U+10FFFF .
Пример кодовой точки выглядит так: U+004F . Его значение зависит от используемой кодировки символов.
Юникод определяет различные кодировки символов , наиболее часто используемыми из которых являются UTF-8, UTF-16 и UTF-32.
UTF-8, безусловно, является самой популярной кодировкой в семействе Unicode, особенно в Интернете. Этот документ написан, например, в UTF-8.
В настоящее время реализовано более 135 000 различных символов с пространством для более чем 1,1 миллиона.
Скрипты
Все символы, поддерживаемые Юникодом, сгруппированы в разделы, называемые скрипты .
Существует сценарий для каждого отдельного набора символов:
- Латиница (содержит все символы ASCII + все остальные символы западного мира)
- Корейский
- Старый венгерский
- Еврей
- Греческий
- Армянский
- …и так далее!
Полный список определен в стандарте ISO 15924 .
Смотрите больше о сценариях: https://en.wikipedia.org/wiki/Script_ (Юникод)
Самолеты
В дополнение к сценариям, существует еще один способ организации символов в Юникоде: плоскости .
Вместо того, чтобы группировать их по типу, он проверяет значение кодовой точки:
| 0 | U+0000 – U+ФФФФ |
| 1 | U+10000 – U+1ФФФФ |
| 2 | U+20000 – U+2ФФФФ |
| … | … |
| 14 | U+E0000 – U+ЭФФФФ |
| 15 | U+F0000 – U+ФФФФФФФ |
| 16 | U+100000 – U+10ФФФФ |
Есть 17 самолетов.
Первый является специальным, он называется Базовая многоязычная плоскость или BMP и содержит большинство современных символов и символов из латинского, кириллического, греческого алфавитов.
Остальные 16 планов называются астральными планами . Стоит отметить, что самолеты с 3 по 13 в настоящее время пусты.
Кодовые точки, содержащиеся в астральных планах, называются астральными кодовыми точками .
Астральные кодовые баллы – это все баллы выше U+10000 .
Кодовые единицы измерения
Кодовые точки хранятся внутри как кодовые единицы . Единица кода – это битовое представление символа, и его длина варьируется в зависимости от кодировки символа
В UTF-32 используется 32-разрядная кодовая единица.
В UTF-8 используется 8-битный кодовый блок, а в UTF-16 используется 16-битный кодовый блок. Если кодовая точка нуждается в большем размере, она будет представлена 2 (или более, в UTF-8) кодовыми единицами.
Графемы
Графема – это символ, представляющий единицу системы письма. Это в основном ваше представление о персонаже и о том, как он должен выглядеть.
Символы
Глиф – это графическое представление графемы: как она визуально отображается на экране, фактический внешний вид на дисплее.
Последовательности
Юникод позволяет комбинировать различные символы для формирования графемы.
Например, это касается символов с ударением: буква é может быть выражена с помощью комбинации буквы e ( U+0065 ) и символ юникода с именем “СОЧЕТАНИЕ ОСТРОГО АКЦЕНТА” ( U+0301 ):
"U+0065U+0301" ➡️ "é"
U+0301 в данном случае это то, что описывается как объединяющий знак , один символ, который применяется к предыдущему, чтобы сформировать другую графему.
Нормализация
Символы иногда могут быть представлены с использованием различных комбинаций кодовых точек.
Например, это касается символов с ударением: буква é может быть выражена как U+00E9 а также как сочетание e ( U+0065 ) и символа юникода с именем “СОЧЕТАНИЕ ОСТРОГО АКЦЕНТА” ( U+0301 ):
U+00E9 ➡️ "é" U+0065U+0301 ➡️ "é"
Процесс нормализации анализирует строку на наличие такого рода двусмысленностей и генерирует строку с каноническим представлением любого символа.
Без нормализации совершенно одинаковые строки на глаз будут считаться разными, потому что их внутреннее представление изменится:
Смайлики
Смайлики – это символы астрального плана в Юникоде, и они позволяют отображать изображения на экране без реальных изображений, просто символы шрифта.
В качестве примера, символ 🐶 кодируется как U+1F436 .
Первые 128 символов
Первые 128 символов Юникода совпадают с набором символов ASCII.
Первые 32 символа, У+0000 – U+001F U+001F//(0-31) называются Управляющими кодами .
Они являются наследием прошлого, и большинство из них сейчас устарели. Они использовались для телетайпных аппаратов, которые существовали еще до появления факса.
Символы от U+0020 (32) до U+007E (126) содержат цифры, буквы и некоторые символы:
| (пространство) | U+0020 (U+0020) | 32 |
| ! | U+0021 | 33 |
| “ | U+0022 | 34 |
| # | U+0023 | 35 |
| $ | U+0024 | 36 |
| % | U+0025 | 37 |
| & | U+0026 | 38 |
| ‘ | U+0027 | 39 |
| ( | U+0028 | 40 |
| ) | U+0029 | 41 |
| * | U+002А | 42 |
| + | U+002В | 43 |
| U+002С | 44 | |
| – | U+002D (U+002D) | 45 |
| . | U+002Е | 46 |
| / | U+002F (U+002F) | 47 |
| 0 | U+0030 (U+0030) | 48 |
| 1 | U+0031 | 49 |
| 2 | U+0032 | 50 |
| 3 | U+0033 | 51 |
| 4 | U+0034 | 52 |
| 5 | U+0035 | 53 |
| 6 | U+0036 | 54 |
| 7 | U+0037 | 55 |
| 8 | U+0038 | 56 |
| 9 | U+0039 | 57 |
| : | U+003А | 58 |
| ; | U+003В | 59 |
| < | U+003С | 60 |
| = | U+003Д | 61 |
| > | U+003Е | 62 |
| ? | U+003F (U+003F) | 63 |
| @ | U+0040 | 64 |
| A | U+0041 | 65 |
| B | U+0042 | 66 |
| C | U+0043 | 67 |
| D | U+0044 | 68 |
| E | U+0045 | 69 |
| F | U+0046 | 70 |
| G | U+0047 | 71 |
| H | U+0048 | 72 |
| I | U+0049 | 73 |
| J | U+004А | 74 |
| K | U+004В | 75 |
| L | U+004С | 76 |
| M | ОТ U+004D | 77 |
| N | U+004Е | 78 |
| O | ОТ U+004F | 79 |
| P | U+0050 | 80 |
| Q | U+0051 | 81 |
| R | U+0052 | 82 |
| S | U+0053 | 83 |
| T | U+0054 | 84 |
| U | U+0055 | 85 |
| V | U+0056 | 86 |
| W | U+0057 | 87 |
| X | U+0058 | 88 |
| Y | U+0059 | 89 |
| Z | U+005А | 90 |
| [ | U+005В | 91 |
| U+005С | 92 | |
| ] | U+005D (U+005D) | 93 |
| ^ | U+005Е | 94 |
| _ | ОТ U+005F | 95 |
| ` | U+0060 (U+0060) | 96 |
| a | U+0061 | 97 |
| b | U+0062 | 98 |
| c | U+0063 | 99 |
| d | U+0064 | 100 |
| e | U+0065 | 101 |
| f | U+0066 | 102 |
| g | U+0067 | 103 |
| h | U+0068 | 104 |
| i | U+0069 | 105 |
| j | U+006А | 106 |
| k | U+006В | 107 |
| l | U+006С | 108 |
| m | U+006D (U+006D) | 109 |
| n | U+006Е | 110 |
| o | U+006F (U+006F) | 111 |
| p | U+0070 | 112 |
| q | U+0071 | 113 |
| r | U+0072 | 114 |
| s | U+0073 | 115 |
| t | U+0074 | 116 |
| u | U+0075 (U+0075) | 117 |
| v | U+0076 | 118 |
| w | U+0077 | 119 |
| x | U+0078 | 120 |
| y | U+0079 | 121 |
| z | U+007А | 122 |
| { | U+007В | 123 |
| U+007С | 124 | |
| } | U+007D (U+007D) | 125 |
| ~ | U+007Е | 126 |
- Номера варьируются от
U+0030доU+0039 - Прописные буквы идут от
U+0041доU+005A - Строчные буквы идут от
U+0061комуU+007А
U+007F (127) – символ удаления.
Все, что происходит в будущем, выходит за рамки ASCII и является исключительно частью Unicode.
Вы можете найти весь список в Википедии: Вы можете найти весь список в Википедии:
Кодировки Юникода
UTF-8
UTF-8 – это кодировка символов переменной ширины, и она может кодировать каждый символ, охватываемый Юникодом, используя от 1 до 4 8-битных байтов.
Первоначально он был разработан Кеном Томпсоном и Робом Пайком в 1992 году. Эти имена знакомы тем, кто интересуется языком программирования Go, так как они также были двумя его первоначальными создателями.
Он рекомендован W3C в качестве кодировки по умолчанию в HTML-файлах, и статистика показывает, что по состоянию на апрель 2018 года он используется на 91,3% всех веб-страниц.
На момент своего появления ASCII был самой популярной кодировкой символов в западном мире. В ASCII всем буквам, цифрам и символам был присвоен номер, и этот номер. Будучи зафиксированным на 8 битах, он мог представлять максимум 255 символов, и этого было достаточно.
UTF-8 был разработан для обеспечения обратной совместимости с ASCII. Это было очень важно для его принятия, так как ASCII был намного старше (1963 год) и широко распространен, а переход на UTF-8 происходил почти прозрачно.
Первые 128 символов UTF-8 точно соответствуют ASCII. Почему 128? Потому что ASCII использует 7-битную кодировку, которая допускает до 128 комбинаций. Почему 7 бит? Сейчас мы принимаем 8 бит как должное, но в те времена, когда был задуман ASCII, 7-битные системы также были популярны.
100% совместимость с ASCII делает UTF-8 также очень эффективным, поскольку наиболее часто используемые символы в западных языках кодируются только 1 байтом.
Вот карта использования байтов:
| U+007F (U+007F) | U+0000 | 1 |
| U+07ФФ | U+0080 | 2 |
| U+ФФФФ | U+0800 | 3 |
| U+10FFФФ | U+10000 | 4 |
Помните, что в ASCII символы были закодированы в виде чисел? Если буква A в ASCII была представлена цифрой 65 , используя UTF-8, он кодируется как U+0041 .
Почему бы и нет U+0065 вы спрашиваете? Хорошо, потому что юникод использует шестнадцатеричную базу, и вместо 10 у вас есть U+000А и так далее (в основном, у вас есть набор из 16 цифр вместо 10)
Взгляните на это видео , которое блестяще объясняет эту совместимость с UTF-8 и ASCII.
UTF-16
UTF-16 – еще одна очень популярная кодировка Юникода. Например, это то, как Java внутренне представляет любой символ. Это также одна из 2 кодировок, которые JavaScript использует внутри , наряду с UCS-2 . Он также используется многими другими системами, такими как Windows.
UTF-16 – это система кодирования переменной длины, подобная UTF-8, но использует 2 байта (16 бит) как минимум для любого представления символов. Как таковой, он обратно несовместим со стандартом ASCII.
Кодовые точки в Базовой многоязычной плоскости (BMP) хранятся с использованием 2 байт. Кодовые точки в астральных планах хранятся с использованием 4 байт.
UTF-32
UTF-8 использует минимум 1 байт, UTF-16 использует минимум 2 байта.
UTF-32 всегда использует 4 байта, без оптимизации использования пространства, и поэтому тратит впустую большую пропускную способность.
Это ограничение ускоряет работу, потому что вам нужно меньше проверять, так как вы можете использовать 4 байта для всех символов.
Он не так популярен, как UTF-8 и UTF-16, но у него есть свои приложения.
Оригинал: “https://flaviocopes.com/unicode/”