кодировка

Кодировки

Зачем нужны кодировки? В чем принцип их работы?

Когда вы видите символ перед собой, то это результат 2-х процессов: набор векторных форм, которые отображают вам этот символ, а второе — это код, по которому этот символ выдергивается из данного набора векторных форм. За векторные формы отвечают шрифты. За кодирование отвечает операционная система, программы и т.д.

Любой документ представляет из себя последовательность байтов. Программа, разбирая эти байты, знает код символа, обращается в шрифт и выдергивает оттуда по этому адресу нужный графический набор. И в конце этот набор мы видим у себя в браузере.

Рассмотрим основные кодировки символов.

Кодировка ASCII

кодировка

Это кодировка, которая описывает первые 128 символов, которые используются англоязычными пользователями. Т.е. это латинские буквы в разном регистре, арабские цифры и знаки препинания. И плюс служебные символы на первых двух строках (см.рисунок выше).

Эти 128 символов присутствуют в любой кодировке и именно в таком порядке.

В этой кодировке 128 символов. В одном байте можно закодировать 256 символов. Поэтому на основе ее стали появляться т.н. ‘расширенные ascii кодировки’. Что это за кодировки? Раз можно закодировать 256 символов, то первые 128 символов — это все символы из данной кодировки ascii, а вторые 128 символов — это символы, которыми вы будете пользоваться в своем языке.

Чтобы закодировать любой символ, нужно, чтобы по этому адресу в шрифте такой символ был, и этот символ кодировался в расширенной кодировке ascii в 1 байт. Таких расширенных кодировок ascii множество. Например CP866.

Кодировка CP866

кодировка

На картинке показана только вторая часть кодировки. Здесь идет использование кириллических символов в разном регистре, псевдографика. Это 1-й этап развития кодировок, когда графические системы были слабые (везде использовался DOS).

Это расширенная кодировка ASCII, которая относится к OEM-кодировкам, которые продвигала компания IBM. Обязательное требование к таким кодировкам — это псевдографика, с помощью которой можно было рисовать графические элементы.

Кодировка KOI8-R

В России тоже развивались свои кодировки, например — koi8-r.

Кодировка KOI8-R

В этой кодировке 1 символ = 1 байт. На картинке показана вторая половина кодировки (первая это ascii).

Кодировка windows-1251

Кодировка windows-1251

Графические системы развивались, у них необходимость в псевдографике пропадала. Поэтому ее убрали. И возникла целая группа расширенных кодировок ascii без псевдографики. У них принцип такой же: 1 символ = 1 байт. А вместо псевдографики появились символы, которые описывают целую группу кириллических языков (украинский, болгарский, сербский, белорусский). Т.е. здесь мы видим целую группу кириллических языков. Поэтому эта кодировка часто называется кириллицей.

Все вышеописанные кодировки — из разряда ASCII. А как быть с азиатскими языками, где не 256 символов, а тысячи? Поэтому изначально там были свои кодировки. Но вскоре компания Microsoft инициировала создание консорциума для решения проблемы кодировок. Консорциум называется unicode (www.unicode.org). Он объединяет в себе сегодня сотни компаний.

И в результате работы консорциума возникали такие кодировки:

  • Кодировка UTF-32. 32 — это количество бит, которое используется для кодирования. И здесь можно описать миллиарды символов. Но есть проблема — в 4 раза увеличивается размер документа, использующего группы европейские языки. Такое не могли себе позволить.
  • Кодировка UTF-16. Эта кодировка была принята в качестве базового пространства для всех символов, которые у нас используются. Здесь используется 2 байта на 1 символ. Всего можно закодировать до 1 миллиона символов. Но был небольшой недостаток для англоязычных программистов, все документы увеличивались в 2 раза по размеру. И придумали кодировку переменной длины — utf-8.
  • Кодировка UTF-8. Это кодировка переменной длины, т.е. каждый символ может быть закодирован от 1 до 6 байт. На практике используется диапазон 1-4 байт, т.к. за 4 байтами ничего не лежит. Все латинские символы из кодировки ascii кодируются в 1 байт, кириллические символы кодируются в 2 байта, грузинские символы — в 3 байта. Иероглифы — в 4 байта. Всего можно закодировать до 1 миллиона символов.

Теперь в шрифтах используется единое кодовое пространство. Значит, у себя в документе я могу использовать абсолютно любые символы (написав из код).




Добавить комментарий

Ваш e-mail не будет опубликован.