1. Основные понятия
Кодирование текста — преобразование символов в двоичные коды.
Исторические этапы:
- ASCII (1963) — 128 символов
- Расширенные кодировки (CP1251, KOI8-R) — 256 символов
- Unicode (1991) — все языки мира
2. Кодировка ASCII
Особенности: 7 бит (128 символов), первые 32 — управляющие.
Таблица ASCII:
| Диапазон | Тип символов | Примеры |
|---|---|---|
| 0-31 | Управляющие | Enter (13), Tab (9) |
| 32-47 | Знаки препинания | ! (33), # (35) |
| 48-57 | Цифры | 0 (48), 9 (57) |
| 65-90 | Латинские заглавные | A (65), Z (90) |
| 97-122 | Латинские строчные | a (97), z (122) |
Пример:
'A' → 65₁₀ → 1000001₂
3. Однобайтные кодировки
Особенности: 8 бит (256 символов), совместимы с ASCII.
Популярные кодировки:
| Кодировка | Языки | Особенности |
|---|---|---|
| CP1251 | Русский, украинский | Windows |
| KOI8-R | Русский | UNIX/Linux |
| ISO-8859 | Европейские языки | Международный стандарт |
Проблема: Несовместимость между кодировками (кракозябры).
4. Стандарт Unicode
Цель: Единая кодировка для всех языков (149 186 символов в версии 15.1).
Основные диапазоны:
| Диапазон | Символы |
|---|---|
| U+0000-U+007F | ASCII |
| U+0400-U+04FF | Кириллица |
| U+4E00-U+9FFF | Китайские иероглифы |
| U+1F600-U+1F64F | Emoji 😊 |
5. Кодировка UTF-8
Принцип: Переменная длина кода (1-4 байта).
Правила кодирования:
| Диапазон | Длина | Шаблон |
|---|---|---|
| U+0000-U+007F | 1 байт | 0xxxxxxx |
| U+0080-U+07FF | 2 байта | 110xxxxx 10xxxxxx |
| U+0800-U+FFFF | 3 байта | 1110xxxx 10xxxxxx 10xxxxxx |
| U+10000-U+10FFFF | 4 байта | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx |
Примеры:
'A'(U+0041) →01000001'Б'(U+0411) →11010000 10010001'😊'(U+1F60A) →11110000 10011111 10011000 10001010
Схема декодирования:
graph TD
A[Начало] --> B{Первый байт}
B -->|0xxxxxxx| C[1 байт: ASCII]
B -->|110xxxxx| D[Читать ещё 1 байт]
B -->|1110xxxx| E[Читать ещё 2 байта]
B -->|11110xxx| F[Читать ещё 3 байта]
D --> G[Собрать символ]
E --> G
F --> G
C --> G
G --> H[Декодированный символ]
6. Расчёт информационного объёма
Формула: \( V = N \times L \)
Где \( V \) — объём (байты), \( N \) — число символов, \( L \) — средняя длина кода.
Примеры:
| Текст | Кодировка | Расчёт | Объём |
|---|---|---|---|
| «Hello» | ASCII | 5 × 1 байт | 5 байт |
| «Привет» | UTF-8 | 6 × 2 байта | 12 байт |
| «Hello😊» | UTF-8 | 5×1 + 1×4 | 9 байт |