vitaly_l писал(а):он априори ложно пишет туда CP866, когда возвращается 22 символа вместо 11, т.к. не понимает для чего указывают $CODEPAGE

и поэтому всем приходится конвертировать файл проекта в CP866. Вместо того чтобы правильно указать CODEPAGE.
Теперь по-русски, пжалста, эту вашу аллюзию мыслей...
Что касается кодовой страницы CP866, она, например в компиляторах ветки 2.7 настолько странно действовала, что можно было сказать, что данная директива для обработки не предусмотрена. Вот считайте, что не существует в директивах CP866, кои-8 и прочей экзотики. Выбор из двух: {$codepage utf8} и {$codepage UTF8} и {$codepage CP1251} (регистр не забываем, во всяком случае во всех описаниях наименование кодовой страницы строго в верхнем регистре).
т.е:
- Делается текст в UTF-8 без BOMов
- опциями компиляции выставляется codepage для RTL в UTF-8 (Лазарус для сових проектов это делает, см. если что там, какой именно ключ)
- в тексте директива {$mode objfpc} {$codepage UTF-8} {H+}
- вместо string - UnicodeString, и только в этом случае можно надеяться на посимвольную обработку строк в виде массива... до тех пор, пока в исходные данные не попадет нечто, кодируемое суррогатными парами. Условно к русским буквам это нечто не относится.
подобного рода программы правильно ведут себя в кроссплатфоменном варианте и благополучно справляются с выводом и вводом кириллицы в консолях win.