我如何防止警告;unicode常量强制转换可能导致数据丢失”;在拉撒路?

我如何防止警告;unicode常量强制转换可能导致数据丢失”;在拉撒路?,unicode,lazarus,freepascal,Unicode,Lazarus,Freepascal,我试图将Tricolon Unicode字符#$205D作为标题分配给Lazarus Windows程序中的按钮,如下所示: MyButton.Caption := #$205D; 它起作用了,按钮显示的是三分号,但编译器发出警告“警告:Unicode常量转换可能会丢失数据” 如何将Tricolon字符正确分配给LCL控件的标题以消除警告?LCL使用UTF8编码,但#$205D是UTF16字符常量。因此,请改用UTF8编码的常量: const CTricolon = #$E2#$81#

我试图将Tricolon Unicode字符#$205D作为标题分配给Lazarus Windows程序中的按钮,如下所示:

MyButton.Caption := #$205D;
它起作用了,按钮显示的是三分号,但编译器发出警告“警告:Unicode常量转换可能会丢失数据”


如何将Tricolon字符正确分配给LCL控件的标题以消除警告?

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编码,或在Lazarus中启动时设置为UTF8)


编译器警告您这是危险的。若要修复此问题,请将源代码编码设置为utf8并指定utf8字符串。

哪些编译器选项与字符编码相关。请尝试
MyButton.Caption:=#$E2#$81#$9D
LCL使用UTF8编码,但
#$205D
是UTF16字符常量。@如果您是对的,这是一个(解决方案?)。你愿意回答这个问题,让我接受吗?大卫:通常,理解是伴随着它的使用而来的@Abelisto计算机中的所有内容都是字节,但这并没有多大帮助。FPC有很多选择和变化。这比你想象的要复杂。