Рассказывать сегодня буду не о самом типе Char (об этом наверняка знают даже начинающие), а об одной его особенности.
Дело в том, что Lazarus, как и большинство современных средств разработки, использует кодировку UTF8. И это не несёт никаких неожиданностей, если вы записываете в переменную типа Char латинскую букву или простой символ, код которого укладывается в один байт. Например:
ch := '+';
ch := 'F';
ch := ':';
это всё компилируется без ошибок.
Однако если вы попробуете сделать так:
то получите ошибку во время компиляции. Потому что русские символы в кодировке UTF8 занимают два байта, а тип Char по умолчанию рассчитан только на один.
Выйти из положения можно двумя способами (может их и больше, но я знаю два).
- Вместо Char можно использовать TUTF8Char, который объявлен в модуле LCLType.
Первый способ лучше применять в приложениях с графическим интерфейсом. В консольных же приложениях лучше использовать второй способ, поскольку он не требует применения дополнительных модулей (LCLType) и позволяет выводить на экран русские буквы, а не кракозябры (правда, в случае использования типа Char проблемы с выводом остаются, но для работы его можно использовать). То есть “убивает двух зайцев”. К тому же при этом вы можете обойтись знакомым типом Char, так как при использовании директивы {$CODEPAGE UTF8} этот тип может хранить символы UTF8 размером два байта (хотя не факт, скорее всего, он просто записывает символы с кодировкой CP866).
На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.