← ТехнологииНай-важното за

Unicode и UTF-8: защо буквата не е непременно един байт

Проверено на 20.10.2026 • 3 източника

В няколко изречения

Накратко

Unicode описва знаците, а UTF-8 е начин за тяхното кодиране. Разликата между байтове, кодови точки и видими знаци има значение за кирилицата, търсенето и обработката на текст.

Полезно е да знаеш

Един текст може да изглежда прост на екрана и да бъде по-сложен в паметта на компютъра. Човек вижда букви, докато файлът съдържа последователност от байтове. За да се възстанови правилният текст, трябва да се знае как тази последователност е кодирана. Unicode и UTF-8 участват в тази задача, но не означават едно и също. Unicode предоставя общ модел за знаците и техните кодови точки, а UTF-8 определя как съответните стойности се представят чрез байтове. [1]

UTF-8 използва променлива дължина: една Unicode скаларна стойност се кодира с между един и четири байта. Знаците от ASCII запазват еднобайтовото си представяне. Много други знаци, включително обичайните български букви, изискват повече. Оттук следва практичен резултат: броят байтове във файл не е равен на броя букви в него. Ограничение от сто байта и ограничение от сто видими знака могат да допуснат различни текстове, въпреки че числото в условието е еднакво. [1]

И кодовата точка не винаги съответства на самостоятелен видим знак. Unicode поддържа комбиниращи знаци, които се прилагат към основен знак. Например буква с ударение може да бъде представена като основна буква и отделен комбиниращ акцент. При показване тези елементи образуват една визуална единица. Това обяснява защо програма, която изрязва текст след определен брой кодови точки, може да раздели нещо, което читателят възприема като един знак. [2]

Някои визуално еднакви текстове могат да имат различни последователности от кодови точки. Нормализацията предоставя стандартизирани форми за обработка на такива случаи. NFC използва канонично съставяне, а NFD — канонично разлагане. Съществуват и форми с преобразувания за съвместимост, които не са взаимозаменяеми с първите във всяка задача. Изборът на форма трябва да бъде съобразен с целта: сравняване, индексиране или съхраняване на точния въведен текст. Нормализацията не е превод и не е проверка на правописа. [3]

Да си представим каталог, в който редакторите въвеждат чужди собствени имена от различни клавиатури. Два еднакво изглеждащи записа могат да не съвпадат при сравняване на суровите им байтове. Добре определената обработка на Unicode позволява търсенето да отчете канонично еквивалентните представяния. Това не означава автоматично да премахнем всички диакритични знаци или да слеем различни букви. Такива промени са отделно продуктово решение и могат да променят смисъла на името. [2, 3]

За разработчика полезният въпрос е коя единица измерва конкретната операция. Размерът за прехвърляне се измерва в байтове; обработката на Unicode може да работи с кодови точки; редактирането на видим текст често изисква внимание към съставните знаци. Различните измервания не си противоречат, а описват различни свойства. Когато системата последователно използва правилната кодировка и подходящите операции за текст, кирилицата и международните имена престават да бъдат изключение и се обработват като естествена част от съдържанието.

Източници

За повече подробности и проверка на информацията:

  1. [1] Unicode Consortium — UTF and BOM FAQ ↗
  2. [2] Unicode Consortium — Characters and Combining Marks ↗
  3. [3] Unicode Consortium — Normalization ↗