Сколько байт занимает русская буква в UTF-8, а сколько английская?
Сохранил текстовый файл в UTF-8 и заметил, что русский текст весит больше английского при том же числе букв. Сколько реально байт занимает одна русская буква в UTF-8, а сколько английская? И от чего это зависит?
2 ответа
В UTF-8 размер символа переменный:
- латинские буквы, цифры, базовые знаки (то, что было в ASCII) — 1 байт;
- кириллица (русские буквы) — 2 байта каждая;
- многие иероглифы — 3 байта; эмодзи — обычно 4 байта.
Поэтому слово cat (3 латинские буквы) = 3 байта, а кот (3 русские буквы) = 6 байт. Отсюда и разница в весе файла — английский текст в UTF-8 компактнее.
Если в задаче явно не сказано иное, для UTF-8 считай: латиница 1 байт, кириллица 2 байта.
Важная оговорка для задач: бывают и кодировки с фиксированным размером. Например, в Windows-1251 (КОИ-8) русская буква = 1 байт, а в UTF-16 — любой обычный символ = 2 байта. Так что число байт на символ зависит именно от кодировки, и в условии задачи её всегда указывают.