如何在Lazarus中防止警告“unicode constant cast with potential data loss”?

时间:2017-06-04 09:36:42

标签: unicode lazarus freepascal

我正在尝试将Tricolon Unicode字符#$ 205D分配给Lazarus Windows程序中的按钮,如下所示:

MyButton.Caption := #$205D;

它工作正常,按钮显示Tricolon很好,但编译器会发出警告“警告:Unicode常量转换,可能会丢失数据”。

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

2 个答案:

答案 0 :(得分:3)

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;

答案 1 :(得分:1)

问题在于检测到2字节 - > (默认)1字节转换是编译时,默认1字节类型的确切代码页是运行时。

(根据区域设置改变Windows编码或在Lazarus启动时设置为UTF8)

编译器警告您这很危险。要修复它,请将源编码设置为utf8并指定utf8字符串。