При работе с Unicode в Delphi разработчики часто используют методы из модуля System.Character, такие как IsControl, IsLetter, IsDigit и другие. Эти методы полагаются на таблицы символов Unicode, которые регулярно обновляются. В данной статье мы разберем, какую именно версию Unicode использует Delphi 11.3 для этих функций.
Определение версии Unicode в Delphi
В Delphi существует специальный метод, позволяющий узнать версию Unicode, на которой основаны таблицы в System.Character:
uses
System.Character;
procedure ShowUnicodeVersion;
begin
WriteLn('Unicode version used: ', TCharacter.UnicodeDataVersion);
end;
Этот метод возвращает строку с номером версии Unicode, используемой в текущей версии Delphi.
Версия Unicode в Delphi 11.3
Согласно информации из официальной документации и ответов сообщества:
Delphi 10.3 использует Unicode 12.1.0
Delphi 12.2 использует Unicode 15.0.0
Delphi 11.3, выпущенный между этими версиями, скорее всего использует Unicode 13.0 или 14.0
Точную версию можно определить, выполнив код выше в Delphi 11.3. Если у вас нет доступа к этой версии, можно предположить, что она использует Unicode 13.0 или 14.0, так как:
Unicode 13.0 была выпущена в марте 2020
Unicode 14.0 - в сентябре 2021
Delphi 11.3 была выпущена в 2022 году
Как проверить контрольные символы
Метод IsControl проверяет, является ли символ управляющим (control character) согласно текущей версии Unicode. Вот пример использования:
procedure CheckControlCharacters;
var
c: Char;
begin
for c := #0 to #255 do
begin
if TCharacter.IsControl(c) then
WriteLn(Format('Control character found: #%d', [Ord(c)]));
end;
end;
Альтернативные решения
Если вам нужно работать с более новой версией Unicode, чем та, что поддерживается в Delphi 11.3, рассмотрите следующие варианты:
Обновление Delphi до более новой версии (например, 12.2 с Unicode 15.0)
Использование внешних библиотек, таких как ICU (International Components for Unicode)
Ручная реализация проверок с актуальными таблицами Unicode
Пример использования ICU4PAS (обертка для ICU):
uses
icu_globals, icu_ucd;
procedure CheckWithICU;
var
props: PUCDProperties;
c: UChar32;
begin
c := Ord('A'); // пример символа
props := ucd_getProperties(c, 0);
if (props^.flags and UCHAR_CONTROL) <> 0 then
WriteLn('Это управляющий символ');
end;
Заключение
Delphi 11.3 использует для методов System.Character одну из версий Unicode между 12.1 и 15.0 (скорее всего, 13.0 или 14.0). Точную версию можно узнать с помощью метода TCharacter.UnicodeDataVersion. Если вам требуется поддержка более новых версий Unicode, рассмотрите обновление Delphi или использование сторонних библиотек.
Понимание версии Unicode важно для корректной обработки текста, особенно при работе с международными приложениями и новыми символами, добавляемыми в стандарт.
Delphi 11.3 использует Unicode версии, скорее всего, 13.0 или 14.0, для методов System.Character, включая IsControl.
Комментарии и вопросы
Получайте свежие новости и обновления по Object Pascal, Delphi и Lazarus прямо в свой смартфон. Подпишитесь на наш Telegram-канал delphi_kansoftware и будьте в курсе последних тенденций в разработке под Linux, Windows, Android и iOS