P
pro·school.ru
Каталог школ

Кодировки Юникод и UTF-8

💻 Информатика · 7 класс

Зачем нужны кодировки

Компьютер хранит и обрабатывает любой текст в виде чисел, потому что в его памяти могут находиться только нули и единицы. Каждому символу ставят в соответствие числовой код, а правило такого соответствия называют кодировкой, или кодовой таблицей. Чтобы разные компьютеры и программы понимали один и тот же текст одинаково, кодировки делают общими стандартами, которыми пользуются все.

Однобайтовые кодировки

Долгое время для кодирования использовали один байт на символ. Один байт даёт 2^8 = 256 кодов. Этого хватает для латиницы, цифр, знаков препинания и одного национального алфавита, например русского. Так появились кодировки Windows-1251 и KOI8-R для русского языка, а также международная таблица ASCII для латинских символов.

У однобайтовых кодировок есть большой недостаток: 256 кодов слишком мало для всех языков мира одновременно. Если текст набран в одной кодировке, а открыт в другой, вместо букв появляются непонятные знаки. Это явление пользователи в шутку называют «кракозябрами». Особенно часто такое случалось при пересылке писем между разными программами.

Стандарт Юникод

Юникод (Unicode) — это международный стандарт, в котором каждому символу всех языков мира назначен свой уникальный номер. Юникод вмещает более миллиона символов: буквы всех известных алфавитов, иероглифы восточных языков, математические и музыкальные знаки и даже значки настроения. Благодаря единой таблице один и тот же документ можно открыть на любом компьютере без искажений.

СвойствоОднобайтовая кодировкаЮникод (UTF-8)
Размер на символ1 байтот 1 до 4 байтов
Число символов256более 1 миллиона
Поддержка языководин алфавитвсе языки сразу
Проблема «кракозябр»возникает частопрактически исчезает

Кодировка UTF-8

Юникод задаёт номера символов, а способ записать эти номера в память называют UTF-8. Эта кодировка устроена экономно: латинские буквы и цифры занимают 1 байт, а буквы русского алфавита — 2 байта. Поэтому объём русского текста в UTF-8 можно оценить так:

I = K · 2 байта, где K — число русских символов

Разобранный пример

Оценим объём слова из 5 русских букв в кодировке UTF-8:

I = 5 · 2 = 10 байтов

То же слово в однобайтовой кодировке Windows-1251 заняло бы только 5 · 1 = 5 байтов. Юникод требует больше места, но зато избавляет от путаницы между языками.

Частая ошибка: считать, что в Юникоде любой символ всегда занимает один байт. В кодировке UTF-8 размер символа разный, и для русских букв он равен двум байтам, а для латинских — одному.

Кратко о главном

  • Кодировка — это правило соответствия символов и числовых кодов.
  • Однобайтовые кодировки вмещают только 256 символов одного алфавита.
  • Юникод даёт единый номер каждому символу всех языков мира.
  • В кодировке UTF-8 русские буквы занимают 2 байта, латинские — 1 байт.
  • Единый стандарт избавляет от «кракозябр» при обмене текстами.