Чет про программирование / 7) Кодирование символов
.docxКодирование символов
Чтобы иметь возможность работать с текстовыми документами на различных компьютерах, люди пришли к выводу, что необходимо кодировать символы, причем единым образом, с использованием определенных стандартов.
Изначально для этого было предложено создать так называемую ASCII-таблицу символов, в которой каждый символ кодируется 1 байтом и которая имеет следующий вид:
-
Первая половина таблицы: 0 – 127 символы – цифры, знаки препинания, англ. Символы (первый бит нулевой)
-
Вторая половина таблицы: 128 – 255 символы – необходимые символы, в зависимости от текущей кодировки (первый бит единица).
Однако возникли следующие вопросы:
-
Символы некоторых языков не помещались в оставшуюся половину таблицы ASCII
-
При такой кодировке в одном документе возможно работать только с одним языком или постоянно переключать кодовые страницы.
Юникод
Для решения данной проблемы было решено создать большую таблицу символов, которая содержала бы все существующие ныне символы + запас. И 1991 году она была создана. Ее название – Unicode.
Стандарт состоит из двух основных разделов: универсальный набор символов (англ. UCS, universal character set) и семейство кодировок (англ. UTF, Unicode transformation format). Универсальный набор символов задаёт однозначное соответствие символов кодам — элементам кодового пространства, представляющим неотрицательные целые числа. Семейство кодировок определяет машинное представление последовательности кодов UCS.
Казалось бы, все проблемы решены, однако появились новые:
-
При таком большом количестве символов на кодировку одного символа уходит слишком много байт
-
Многие английские тексты уже были написаны с помощью ASCII.
UTF-8 — представление Юникода, обеспечивающее наилучшую совместимость со старыми системами, использовавшими 8-битные символы. Текст, состоящий только из символов с номером меньше 128, при записи в UTF-8 превращается в обычный текст ASCII. И наоборот, в тексте UTF-8 любой байт со значением меньше 128 изображает символ ASCII с тем же кодом. Остальные символы Юникода изображаются последовательностями длиной от 2 до 6 байт (на деле, только до 4 байт, поскольку в Юникоде нет символов с кодом больше 10FFFF, и вводить их в будущем не планируется), в которых первый байт всегда имеет вид 11xxxxxx, а остальные — 10xxxxxx. В UTF-8 не используются суррогатные пары, 4-x байтов достаточно для записи любого символа юникода.
UTF-16 (англ. Unicode Transformation Format) в информатике — один из способов кодирования символов из Unicode в виде последовательности 16-битных слов. Данная кодировка позволяет записывать символы Юникода в диапазонах U+0000..U+D7FF и U+E000..U+10FFFF (всего 1 112 064 штук). При этом каждый символ записывается одним или двумя словами (суррогатная пара).