Как предотвратить предупреждение "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 ответа:
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.