I cannot find an answerin the reference manual, nor in the sections on strings in the AdaCore tutorials. Is the unit bytes (doubtful for bounded or unbounded strings), code units (pretty sure no), code points, or grapheme clusters? And where in the documentation is this information to be found?
Since fixed strings are ISO Latin I (so bytes or Ada Characters) and there are conversion functions available, I would guess code points. But I'd rather know then guess. I'm sure this must be specified somewhere.
String types are array, thus 'Length
is number of elements in the array. In modern context it is almost meaningless, because it is not Unicode characters, not necessary code units, not grapheme clusters, etc.
There is VSS library to handle Unicode text, see https://github.com/AdaCore/VSS
It provides type to store/modify strings, coders/decoders to convert to/from different encodings, Unicode code points/grapheme clusters/words/lines iterators, string templates/formatters, and some Unicode algorithms to process text (normalization, case conversion).