我正在尝试将Tricolon Unicode字符#$ 205D分配给Lazarus Windows程序中的按钮,如下所示:
MyButton.Caption := #$205D;
它工作正常,按钮显示Tricolon很好,但编译器会发出警告“警告:Unicode常量转换,可能会丢失数据”。
如何正确地将Tricolon角色分配给LCL控件的标题以消除警告?
答案 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字符串。