Найти в Дзене

Char в Lazarus

Рассказывать сегодня буду не о самом типе Char (об этом наверняка знают даже начинающие), а об одной его особенности.

Дело в том, что Lazarus, как и большинство современных средств разработки, использует кодировку UTF8. И это не несёт никаких неожиданностей, если вы записываете в переменную типа Char латинскую букву или простой символ, код которого укладывается в один байт. Например:

ch := '+';
ch := 'F';
ch := ':';

это всё компилируется без ошибок.

Однако если вы попробуете сделать так:

то получите ошибку во время компиляции. Потому что русские символы в кодировке UTF8 занимают два байта, а тип Char по умолчанию рассчитан только на один.

Выйти из положения можно двумя способами (может их и больше, но я знаю два).

  1. Вместо Char можно использовать TUTF8Char, который объявлен в модуле LCLType.
  2. Использовать директиву {$CODEPAGE UTF8} (подробнее см. здесь).

Первый способ лучше применять в приложениях с графическим интерфейсом. В консольных же приложениях лучше использовать второй способ, поскольку он не требует применения дополнительных модулей (LCLType) и позволяет выводить на экран русские буквы, а не кракозябры (правда, в случае использования типа Char проблемы с выводом остаются, но для работы его можно использовать). То есть “убивает двух зайцев”. К тому же при этом вы можете обойтись знакомым типом Char, так как при использовании директивы {$CODEPAGE UTF8} этот тип может хранить символы UTF8 размером два байта (хотя не факт, скорее всего, он просто записывает символы с кодировкой CP866).

На этом всё. Подписывайтесь на канал, чтобы ничего не пропустить.