Руководства 02

Как считаются байты: UTF-8, EUC-KR, CP949

Когда символ хангыля занимает 2 байта, а когда 3. Расчёт байтов для разных кодировок и на что обратить внимание в SMS и базах данных.

Символы и байты — не одно и то же

Число символов — это количество знаков, которые видит человек, а байты — объём, который текст занимает при хранении в компьютере. Один и тот же символ может занимать разное количество байтов в зависимости от кодировки (правила, переводящего символы в числа). Латинские буквы и цифры почти во всех кодировках занимают 1 байт, а корейский хангыль — 2 или 3 байта в зависимости от кодировки.

UTF-8: современный стандарт

UTF-8 — кодировка веб-страниц и большинства современных программ. В зависимости от величины номера Юникода (кодовой точки) она использует от 1 до 4 байтов (RFC 3629).

Диапазон кодовых точекБайтыПримеры
U+0000 ~ U+007F1Латиница, цифры, основные знаки
U+0080 ~ U+07FF2é, ñ, греческое, кириллическое и арабское письмо
U+0800 ~ U+FFFF3Хангыль, иероглифы, кана
U+10000 ~ U+10FFFF4Большинство эмодзи, древние письменности

Все готовые слоги хангыля (от 가 до 힣, U+AC00~U+D7A3) лежат в третьем диапазоне, поэтому в UTF-8 один символ занимает 3 байта. Например, «안녕하세요» (здравствуйте) — это 5 символов и 15 байтов. Кстати, кириллица попадает во второй диапазон: русская буква в UTF-8 занимает 2 байта.

UTF-16

UTF-16, используемая внутри JavaScript, Java и Windows, хранит большинство символов в 2 байтах, а символы начиная с U+10000, такие как эмодзи, — в 4 байтах (суррогатная пара). Именно поэтому длина строки в JavaScript считает эмодзи за 2.

EUC-KR: корейская кодировка готовых слогов

EUC-KR основана на корейском промышленном стандарте KS X 1001. Латиница и цифры занимают 1 байт, символы из KS X 1001 — 2 байта. KS X 1001 содержит 2350 употребительных слогов хангыля, 4888 ханча (китайских иероглифов), кану, греческие и кириллические буквы и множество знаков.

Проблема в том, что из 11 172 слогов современного хангыля в набор входят лишь 2350. Отсутствующие слоги, такие как «똠», «햏» или «뷁», нельзя представить в базовом двухбайтовом EUC-KR. В приложении к стандарту есть способ комбинирования с использованием 8 байтов, но его поддерживают редкие программы, поэтому обычно символ превращается в «?» или возникает ошибка.

CP949: расширенная кодировка

CP949 (Unified Hangul Code от Microsoft) расширяет EUC-KR и кодирует все 11 172 слога современного хангыля двумя байтами. Поскольку это была корейская кодовая страница Windows по умолчанию, она широко распространена в старых корейских документах и системах. Привычное правило «латиница — 1 байт, хангыль — 2 байта» в основном пришло именно отсюда.

Когда важны байты

Как считает этот инструмент

Байты UTF-8 точно вычисляются по кодовой точке каждого символа. Для EUC-KR и CP949 инструмент по реальной таблице символов каждой кодировки проверяет, можно ли представить символ двумя байтами. Непредставимые символы (эмодзи, отсутствующие в наборе слоги хангыля и т. п.) обычно заменяются однобайтовым «?», поэтому считаются за 1 байт, а их количество выводится отдельно. Если в режиме эссе выбрать основу «Байты (хангыль = 2)», подсчёт ведётся по CP949.

Актуально на: 2026-09-23

Открыть счётчик символов →