Кодировки Юникод и 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 байт.
- Единый стандарт избавляет от «кракозябр» при обмене текстами.