В кодировката UTF-8 една буква от българската азбука заема 2 байта, а латинските букви от A до Z, цифрите, интервалът и препинателните знаци от ASCII заемат по 1 байт. Други латински букви като „é“ заемат 2 байта, а знаци като € и „ заемат по 3 байта, а емоджи като 😀 заема 4 байта.
Затова един текст на кирилица почти винаги заема повече байтове, отколкото символи показва броячът. Разликата е важна, когато записвате текст в поле на база данни, попълвате формуляр с ограничение или следите размера на файл.
Колко байта заема един символ в UTF-8 според RFC 3629
Броят байтове зависи от кодовата точка на символа, тоест от номера му в Unicode. Документът RFC 3629, който описва UTF-8, разделя кодовите точки на четири диапазона (раздел 3, проверено на 29 октомври 2026 г.).
| Кодови точки | Байтове в UTF-8 | Какво попада тук |
|---|---|---|
| от U+0000 до U+007F | 1 | латински букви, цифри, интервал, основни препинателни знаци (ASCII) |
| от U+0080 до U+07FF | 2 | буквите на кирилица, включително „ѝ“ |
| от U+0800 до U+FFFF (без U+D800 до U+DFFF) | 3 | например €, „ и някои разширени кирилски букви |
| от U+10000 до U+10FFFF | 4 | емоджи като 😀 |
Кодовата точка и байтовете не са едно и също. Буквата „а“ има кодова точка U+0430, а в UTF-8 се записва с двата байта D0 и B0. Колкото по-голяма е кодовата точка, толкова повече байтове са нужни, за да се запише.
Колко байта заемат българските думи и изречения
Една българска дума заема два пъти повече байтове, отколкото има букви, а всяка цифра, интервал или препинателен знак добавя по 1 байт. Измерихме примерите по-долу на 29 октомври 2026 г. с Python 3.13. Броихме кодовите точки и дължината на текста в байтове след кодиране в UTF-8.
| Текст | Символи | Байтове в UTF-8 | Откъде идва числото |
|---|---|---|---|
| Hello | 5 | 5 | 5 латински букви по 1 байт |
| Здравей | 7 | 14 | 7 букви по 2 байта |
| Щастие | 6 | 12 | 6 букви по 2 байта |
| София 2026 | 10 | 15 | 5 букви по 2 байта, един интервал и 4 цифри по 1 байт |
| Здравей, свят! | 14 | 25 | 11 букви по 2 байта, запетая, интервал и удивителен знак по 1 байт |
| лв. | 3 | 5 | 2 букви по 2 байта и точка от 1 байт |
| 😀 | 1 | 4 | едно емоджи от 4 байта |
Сметката е лесна, ако знаете от какво се състои текстът. Смятате буквите на кирилица по 2 байта, всичко от ASCII по 1 байт и добавяте по 4 за емоджи като 😀. Други емоджита може да се състоят от няколко кодови точки и да заемат повече, затова за текст с емоджита е по-сигурно да ползвате калкулатора. Главните букви не променят сметката. „Щ“ в „Щастие“ също заема 2 байта, колкото и малкото „щ“.
UTF-8 байтовете на кирилските букви в шестнадесетичен вид
В UTF-8 всяка буква на кирилица се записва с два байта. В примерите по-долу първият байт е D0 или D1. Стойностите са изчислени на 29 октомври 2026 г. с Python 3.13.
| Буква | Кодова точка | UTF-8 байтове | Брой байтове |
|---|---|---|---|
| а | U+0430 | D0 B0 | 2 |
| б | U+0431 | D0 B1 | 2 |
| й | U+0439 | D0 B9 | 2 |
| щ | U+0449 | D1 89 | 2 |
| ъ | U+044A | D1 8A | 2 |
| ю | U+044E | D1 8E | 2 |
| я | U+044F | D1 8F | 2 |
| ѝ | U+045D | D1 9D | 2 |
Тези двойки са полезни, когато преглеждате файл байт по байт или търсите причината текстът да се показва неправилно. Байтовете D0 и D1 сами по себе си не са букви. Буквата се получава едва заедно със следващия байт.
Защо броят на символите и броят на байтовете не съвпадат
Броят на символите (кодовите точки) обикновено съвпада с броя на знаците, които виждате, а броят на байтовете показва колко място заемат те в UTF-8. Един видим знак обаче може да се състои от няколко кодови точки. В UTF-8 знаците са с различна дължина, затова двете числа съвпадат само при текст изцяло от ASCII, както при „Hello“. Щом в текста има кирилица, байтовете стават повече от символите.
Буквата й може да заема 2 или 4 байта
Знак, който изглежда по един и същ начин, може да бъде записан по два начина. Стандартът Unicode описва съставения запис NFC и разложения запис NFD в документа UAX #15 Normalization Forms (проверено на 29 октомври 2026 г.). В българския това се вижда най-ясно при „й“.
| Запис на „й“ | Кодови точки | Байтове | UTF-8 байтове |
|---|---|---|---|
| един знак U+0439 (NFC) | 1 | 2 | D0 B9 |
| „и“ и комбиниращ знак U+0306 (NFD) | 2 | 4 | D0 B8 CC 86 |
На екрана двата варианта изглеждат еднакво. Във втория обаче след буквата „и“ следва отделен знак, който добавя дъгичката над нея. Брояч на кодови точки ще покаже 2 символа, а размерът ще е 4 байта. Такъв разложен запис може да се появи в текст, копиран от някои източници. Ако кратка дума заема повече байтове, отколкото очаквате, проверете дали в нея няма разложени букви.
Буквата „ѝ“ (U+045D), която се използва например в „Дадох ѝ книгата“, при нашето измерване се оказа една кодова точка и зае 2 байта като останалите букви. Тя обаче също може да бъде записана разложено, като „и“ (U+0438) с комбиниращо ударение (U+0300), и тогава заема 4 байта.
Колко байта заема един и същ текст в UTF-8, UTF-16 и Windows-1251
Един и същ текст има различен размер в различните кодировки. На 29 октомври 2026 г. изчислихме размера на изречението „Здравей, свят“ (13 символа, без удивителен знак) в три кодировки.
| Кодировка | Байтове | Как се получава |
|---|---|---|
| UTF-8 | 24 | 11 букви по 2 байта, запетаята и интервалът по 1 байт |
| UTF-16 (без BOM) | 26 | всеки от 13-те символа по 2 байта, с маркер BOM става 28 |
| Windows-1251 | 13 | всеки символ по 1 байт |
Правилата за UTF-16 са описани в RFC 2781 (раздел 2.1, проверено на 29 октомври 2026 г.). Символ с кодова точка под U+10000 се записва с едно 16-битово число, тоест с 2 байта. Символ с по-голяма кодова точка се записва с две такива числа (т.нар. сурогатна двойка), тоест с 4 байта. Затова в UTF-16 латинското „a“ и кирилското „а“ заемат еднакво място, а 😀 пак заема 4 байта.
Windows-1251 е еднобайтова кодова страница. В таблицата за съответствие CP1251.TXT на Unicode Consortium почти всеки байт от 0x00 до 0xFF е свързан с един знак от Unicode. Изключение е байтът 0x98, който в таблицата е отбелязан като неопределен. Например 0xC0 отговаря на „А“ (U+0410), а 0xE0 на „а“ (U+0430). Затова в тази кодировка повечето кирилски букви заемат 1 байт. За сметка на това кодовата страница може да записва само знаците от своята таблица. Българската „ѝ“ (U+045D) например не е в CP1251.TXT и не може да се запише директно в Windows-1251.
Защо кирилицата понякога се показва като Р°, С‰ и подобни знаци
Нечетливи знаци като „Р°“ се появяват, когато байтове, записани в UTF-8, бъдат прочетени като Windows-1251. Програмата приема всеки от двата байта на буквата за отделен знак и вместо една буква показва две.
При „а“ байтовете са D0 B0. В Windows-1251 байтът D0 е „Р“, а B0 е „°“, затова на екрана излиза „Р°“. Същото се случва и с останалите букви (изчислено с Python 3.13 на 29 октомври 2026 г.).
| Буква | UTF-8 байтове, прочетени като Windows-1251 |
|---|---|
| а | Р° |
| б | Р± |
| щ | С‰ |
| ъ | СЉ |
| ю | СЋ |
| я | СЏ |
При същото грешно четене изречението „Здравей, свят“ се превръща ⠄Здравей, СЃРІСЏС‚“. Как точно ще изглеждат сбърканите знаци, зависи от кодовата страница, с която се четат байтовете. Примерите тук са изчислени само за Windows-1251 и при друга кодова страница знаците ще са други.
В такъв случай байтовете във файла са наред, просто се тълкуват по грешна таблица. Отворете файла отново и изрично посочете кодировка UTF-8. Ако текстът стане четлив, файлът наистина е в UTF-8. Ако обаче файлът вече е бил записан повторно с грешните знаци, смяната на кодировката може да не е достатъчна.
Как да измерите размера на текст с калкулатора на digily.link
Можете да поставите текста в „Калкулатор за размер на текст“, който показва размера в байтове още докато пишете. Digily Link е наш продукт, а калкулаторът е един от инструментите на сайта digily.link.
- Отворете страницата Калкулатор за размер на текст в байтове.
- Напишете или поставете текста в полето „Текст“.
- Вижте стойността в „Размер“. Тя се обновява при всяка промяна и няма бутон за пресмятане.
Изчислението се извършва в браузъра и текстът не се изпраща към сървъра. Калкулаторът не прави допълнително почистване или Unicode нормализация на въведеното, затова измерва точно това, което сте поставили, включително интервалите, новите редове и разложените букви. Броят се байтове в UTF-8. Ако поставите „Здравей“, резултатът би трябвало да е 14 B, колкото показа и нашето измерване.
Размерът се показва в B, KB, MB, GB или TB, закръглен до два знака след десетичния разделител. Тук 1 KB е равен на 1024 байта (по стандартната нотация това е 1 KiB, а 1 kB са 1000 байта). Текст от точно 1024 байта се показва като „1024 B“, а при 1025 байта калкулаторът минава към килобайти и показва „1 KB“. Ако друга програма даде малко по-различно число в килобайти, проверете дали тя не смята 1 KB за 1000 байта.
Как да вместите текст на кирилица в поле с ограничение в байтове
В поле, което брои байтове, се побират около два пъти по-малко символи на кирилица, отколкото на латиница. Да вземем поле, което приема най-много 160 байта. Ограничението е измислено и не е взето от конкретна платформа.
| Какъв е текстът | Колко символа се побират в 160 байта |
|---|---|
| само латински букви, цифри и интервали (ASCII) | до 160 |
| само букви на кирилица | около 80 |
| кирилица с интервали, цифри и препинателни знаци | между 80 и 160 според дела на ASCII знаците, които са по 1 байт (кавичките „“ обаче са по 3) |
| текст с емоджи | по-малко, защото емоджи като 😀 заема 4 байта, а някои емоджита и повече |
Например „Здравей, свят!“ има 14 символа, но заема 25 байта. От ограничението то изразходва толкова, колкото 25 латински знака.
- Напишете текста и го поставете в полето „Текст“ на калкулатора.
- Сравнете стойността в „Размер“ с ограничението. Тъй като 160 байта са под 1024, резултатът ще е в B.
- Ако стойността е над 160 B, съкратете някои думи, махнете емоджитата или, където е уместно, напишете числата с цифри. Цифрата е 1 байт, а буквата на кирилица е 2.
- Ако символите са малко, а байтовете неочаквано много, проверете копирания текст за разложени букви.
- Проверете текста и в самата система, защото тя може да брои символи вместо байтове или да смята по свой начин.
Какво да имате предвид при измерването на текст
Калкулаторът показва размера на текста в UTF-8, а не размера на конкретен файл на диска. Ако текстът бъде запазен в друга кодировка, например Windows-1251, размерът на файла може да се различава от стойността в „Размер“.
Новите редове също се броят и добавят байтове. Ако копирате текст с празни редове в края, размерът ще нарасне, макар че те не се виждат. Затова, преди да сравните резултата с ограничението, изтрийте излишните редове и интервали.
Когато трябва да вместите текст в точно ограничение, измерете размера на текста си в байтове, преди да го публикувате или запишете.