Символьные типы

Введение в символьные типы Delphi
В среде разработки Delphi символьные типы являются фундаментальными строительными блоками для работы с текстом. В 2026 году, с учетом перехода на 64-разрядные компиляторы и полную поддержку Unicode, выбор правильного символьного типа определяет производительность, совместимость с внешними библиотеками и объем потребляемой памяти. Данный материал рассматривает технические аспекты каждого типа, их внутреннее устройство и критерии выбора.
Основной тип Char
Начиная с Delphi 2009, тип Char (синоним WideChar) занимает 2 байта (16 бит) и хранит символы в кодировке UTF-16. Технические характеристики:
- Размер: 2 байта
- Диапазон: #0..#65535 (базовая плоскость Unicode BMP)
- Совместимость: все современные строковые операции (String = UnicodeString)
- Использование: рекомендуется по умолчанию для всех текстовых данных внутри приложений
Качество реализации: внутренняя таблица символов соответствует стандарту ISO/IEC 10646. В отличие от AnsiChar, не требуется перекодировка при работе с системными функциями Windows (которые также используют UTF-16).
AnsiChar — для обратной совместимости
Тип AnsiChar занимает 1 байт (8 бит) и представляет символы однобайтовой кодовой страницы. Технические детали:
- Размер: 1 байт
- Кодовая страница: зависит от системной локали (например, 1251 для кириллицы, 1252 для западноевропейской)
- Ограничение: не может корректно хранить символы за пределами 0..255
Спецификации применения:
- Используется только для совместимости с легаси-кодом или внешними библиотеками (например, C/C++ DLL, работающими с char).
- Материалы по оптимизации: операции с AnsiChar выполняются быстрее за счет меньшего размера, но риск потери данных при конвертации из UTF-16 превышает выгоду.
- Контроль качества: при смешивании типов необходим явный вызов функций AnsiChar() или WideChar() для избежания неявного преобразования.
- По сравнению с C++ wchar_t: в Delphi WideChar всегда 2 байта (в C++ размер зависит от платформы).
- По сравнению с Java char: идентичен по размеру и кодировке.
- По сравнению с C# char: полная совместимость при P/Invoke вызовах.
- Функция HighSurrogate(Char) и LowSurrogate(Char) позволяют проверить, является ли символ частью суррогатной пары.
- Для работы со строками, содержащими эмодзи, необходимо использовать функции UnicodeString, а не посимвольную обработку через массив Char.
- Метрики качества: правильная поддержка суррогатных пар — критерий корректной работы с глобализированным текстом.
- Размер указателя: 4 байта для 32-битных сборок, 8 байт для 64-битных.
- Null-терминированная строка: конец строки обозначается символом #0.
- Применение: взаимодействие с API Windows, работа с буферами фиксированной длины.
- В отличие от String, PChar не управляется автоматически — требуется ручное управление памятью или копирование через StrPCopy/PCharBuffer.
- В отличие от нуль-терминированных строк C, в Delphi не требуется завершать строку нулем при использовании String (он встроен автоматически).
- Char (WideChar) — стандартный выбор для всех новых проектов.
- AnsiChar — только если требуется совместимость с конкретным API, ожидающим однобайтовые данные.
- PChar — исключительно для прямых вызовов Windows API без посредников.
- Проверка на неявное расширение/сужение типов с помощью директивы {$WARN IMPLICIT_STRING_CAST ON}.
- Использование SizeOf(Char) для динамического определения размера в коде (полезно при переносе между версиями Delphi).
- Тестирование на строках с символами >#127 для выявления ошибок кодировки.
WideChar и сходство с Char
Технически WideChar и Char — идентичные суррогаты. Однако фрагмент кода с явным указанием WideChar явно документирует намерение работать с многобайтовой кодировкой. Отличия от альтернатив:
WideChar и суррогатные пары
Важный технический нюанс: тип WideChar (2 байта) не может хранить символы вне базовой плоскости Unicode (например, эмодзи или редкие иероглифы). Такие символы представляются двумя WideChar (суррогатная пара). Спецификация обработки:
PChar — указатель на символьный массив
Тип PChar (синоним PWideChar) — это указатель на первый элемент массива WideChar. Технические спецификации:
Отличия от альтернатив:
Материалы и рекомендации по качеству
При выборе символьного типа в 2026 году руководствуйтесь следующими правилами:
Контрольные точки для верификации:
Добавлено: 27.04.2026
