Как предотвратить предупреждение "Unicode constant cast with potential data loss" в Lazarus?


Я пытаюсь назначить символ Триколона Unicode #$205D в качестве подписи к кнопке в программе Lazarus Windows, как это:

MyButton.Caption := #$205D;

Это работает, кнопка отображает Триколон нормально, но компилятор выдает предупреждение "Warning: Unicode constant cast with potential data loss".

Как правильно назначить символ Триколона заголовку элемента управления LCL, чтобы избавиться от предупреждения?

2 3

2 ответа:

LCL использует кодировку UTF8, но #$205D является символьной константой UTF16. Поэтому вместо этого используйте кодированные константы UTF8:

const
    CTricolon = #$E2#$81#$9D;
    //CTricolon = '⁝'; // Also works fine if using character(s) as is in the source

...

    MyButton.Caption := CTricolon;

Проблема заключается в том, что обнаружение преобразования 2-байт -> (по умолчанию) 1-байт-это compiletime, а точная кодовая страница типа 1-байт по умолчанию-runtime.

(либо изменение кодировок Windows в зависимости от локали, либо установка UTF8 при запуске в Lazarus)

Компилятор предупреждает вас, что это опасно. Чтобы исправить это, установите исходную кодировку в utf8 и назначьте строку utf8.