> -- Ярослав Романченко писал(а):
> В А2 есть UTF8Strings.Mod с процедурами кодирования/декодирования.Во! Это уже гораздо лучше!
Только всё же безопасность хромает, даже процедура Valid не спасает. Например, передать ей любую строку, в которой первые два символа "C0X 80X", и она всю строку будет считать валидной. Разве же это правильно?

Идея с массивом CodeLength понравилась, но нужны доработки. Например, позиции 0FEH и 0FFH в этом массиве не инициализируются процедурой загрузки модуля. Если там окажется одно из возможных значений, будет ошибка, а если там будет 0X, то, например, процедура Length зависнет на этих символах - вопреки заявлению документации "violations of these assumptions may cause run-time exceptions, butnot endless loopsor memory corruption".

Другие всякие есть позиции, которые должны бы считаться ошибкой, но будут радостно пропущены процедурой Valid. Например, коды из диапазона суррогатных пар UTF-16, значения > 10FFFFH и некоторые другие.

Вердикт: из рассмотренных на сегодня это самая лучшая реализация, но подходит только для использования с well-formed UTF-8.