Что такое кодировка?

Раскрываем тайну кодировки: как нули и единицы превращаются в текст. Просто о сложном без скучной теории!

Бесплатная консультация юриста

+7 (800) 302-87-29

Реклама jurik.ru

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

Основные исторические кодировки

  • ASCII (American Standard Code for Information Interchange) – 7‑битная таблица‚ содержащая (латинские буквы верхнего и нижнего регистра‚ цифры‚ знаки препинания‚ управляющие коды).
  • ISO‑8859‑1 (Latin‑1) – расширение ASCII до 8 бит‚ добавляет символы для западноевропейских языков.
  • Windows‑1251 – 8‑битная кодировка‚ используемая в Windows для кириллицы.
  • CP‑866 – альтернативная 8‑битная кодировка кириллицы‚ распространённая в DOS.
  • KOI‑8R – ещё одна 8‑битная кодировка кириллицы‚ где буквы расположены по порядку латинских кодов.
  • ISO‑8859‑5 – 8‑битная кодировка для кириллицы‚ используемая в некоторых Unix‑системах.

Все перечисленные выше кодировки являются однобайтовыми: каждый символ представлен ровно одним байтом (0‑255). Это ограничивает набор доступных символов 256 значениями‚ что недостаточно для поддержки всех мировых письменностей.

Unicode и UTF‑8

Для решения проблемы ограниченного набора символов был создан Unicode — универсальный стандарт‚ присваивающий уникальный номер (кодовую точку) каждому известному символу. На сегодняшний день Unicode охватывает более 140 .

Unicode сам по себе не указывает‚ как хранить эти кодовые точки в памяти. Для этого существуют различные формы преобразования‚ называемые UTF (Unicode Transformation Format). Наиболее распространённая из них, UTF‑8.

Как работает UTF‑8?

UTF‑8 — переменно‑длинная кодировка:

  1. Символы из диапазона U+0000–U+007F (то есть обычный ASCII) кодируются одним байтом‚ cuyas биты совпадают с кодом ASCII. Это обеспечивает полную обратную совместимость с ASCII.
  2. Символы U+0080–U+07FF кодируются двумя байтами. Первый байт начинается с паттерна 110xxxxx‚ второй — с 10xxxxxx.
  3. Символы U+0800–U+FFFF кодируются тремя байтами (паттерны 1110xxxx 10xxxxxx 10xxxxxx).
  4. Символы U+10000–U+10FFFF кодируются четырьмя байтами (паттерны 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx).

Таким образом‚ английский текст и числа занимают столько же места‚ что и в чистом ASCII‚ а символы других алфавитов (кириллица‚ греческий‚ китайский и т.д.) используют два‚ три или четыре байта.

Преимущества UTF‑8

  • Обратная совместимость с ASCII.
  • Экономия места для текстов‚ predominately латинских.
  • Поддержка всего набора Unicode.
  • Широко поддерживается веб‑браузерами‚ серверами‚ базами данных и языками программирования.
<meta charset="UTF-8">

Этот тег следует размещать как можно ближе к началу <head>‚ ideally сразу после открывающего тега <head>. Тогда браузер получит информацию о кодировке до того‚ как начнёт парсить любой контент страницы.

Практические примеры

Ниже показано‚ как одна и та же фраза «Привет» выглядит в различных однобайтовых кодировках и в UTF‑8.

  • Windows‑1251: байты CF F0 E8 E2 E5 F2
  • CP‑866: байты E2 F0 E8 E2 E5 F2
  • KOI‑8R: байты F0 E2 E5 E2 F2 F0
  • ISO‑8859‑5: байты D0 F0 E8 E2 E5 F2
  • UTF‑8: байты D0 9F D1 80 D0 B8 D0 B2 D0 D5 D1 82

Обратите внимание‚ что в UTF‑8 каждый кириллический символ занимает два байта‚ тогда как в однобайтовых кодировках — один.

Типичные проблемы и способы их избежать

«Кракозябры» из‑за неверной кодировки

Если браузер считает‚ что документ в одной кодировке‚ а на самом деле он сохранён в другой‚ пользователь увидит бессмысленные символы. Например‚ файл‚ сохранённый в Windows‑1251‚ но объявленный как UTF‑8‚ покажет вместо «Привет» что‑то вроде Привет.

Как избежать:

  • Всегда сохраняйте исходные файлы в той кодировке‚ которую указываете в мета‑теге.
  • При работе с редакторами проверяйте статусную строку: большинство IDE показывают текущую кодировку файла.
  • Если нужно перекодировать файл‚ используйте проверенные инструменты (например‚ iconv или встроенные функции редактора).

Смешивание кодировок в одном документе

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

Как избежать:

  • При получении данных явно указывайте требуемую кодировку (например‚ при подключении к MySQL: SET NAMES utf8mb4).
  • Преобразуйте входящие данные в UTF‑8 сразу после получения.
  • Весь стек (файлы‚ база данных‚ сервер‚ клиент) должен работать в одной и той же кодировке — предпочтительно UTF‑8.

Отсутствие BOM и неправильное определение кодировки

Некоторые редакторы добавляют в начало файла байтовый порядковый маркер (BOM). В UTF‑8 BOM не обязателен и может вызывать проблемы у старых скриптов‚ которые не ожидают его наличия.

Рекомендация: Для веб‑страниц лучше не использовать BOM в UTF‑8 файлах. Если вы всё же встретили файл с BOM‚ убедитесь‚ что ваш сервер или скрипт корректно его обрабатывает (обычно достаточно игнорировать первые три байта).

Понимание кодировок — фундаментальный навык любого разработчика. Выбор UTF‑8 в качестве стандартной кодировки для веб‑проектов значительно упрощает работу с многоязычным контентом и минимизирует риски возникновения ошибок отображения. Помните:

  • Сохраняйте исходные файлы в той же кодировке‚ что и объявленную.
  • При работе с внешними данными явно задавайте и преобразуйте кодировку в UTF‑8.
  • Тестируйте отображение страниц в разных браузерах и на разных операционных системах‚ чтобы убедиться‚ что текст выглядит корректно.

Следуя этим простым правилам‚ вы избавите себя от большинства проблем с «кракозябрами» и сможете сосредоточиться на создании качественного контента.