Рубрики
Без рубрики

Введение в Юникод и UTF-8

Юникод – это отраслевой стандарт для последовательного кодирования письменного текста. Изучите основы и наиболее важные его части, в частности касающиеся UTF-8

  • Скрипты
  • Самолеты
  • Кодовые единицы измерения
  • Графемы
  • Символы
  • Последовательности
  • Нормализация
  • Смайлики
  • Первые 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 символа, У+0000U+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/”