在freepascal中有没有显示Unicode符号的函数(例如U+1D15E)?不幸的是,Chr()
只能用于ANSI字符(其代码小于127)。
我想使用来自自定义符号字体的符号,将它们直接放入源代码非常不方便(因为它们在系统字体中不存在,所以它们在Lazarus中显示为?
或其他一些东西)。
在freepascal中有没有显示Unicode符号的函数(例如U+1D15E)?不幸的是,Chr()
只能用于ANSI字符(其代码小于127)。
我想使用来自自定义符号字体的符号,将它们直接放入源代码非常不方便(因为它们在系统字体中不存在,所以它们在Lazarus中显示为?
或其他一些东西)。
const
HalfNoteString = UTF8String(#$F0#$9D#$85#$9E);
UTF-16:
const
HalfNoteString = UnicodeString(#$D834#$DD5E);
我从未使用过Free Pascal,但如果我是你,我会尝试一下。
var
s: char;
begin
s := char($222b); // Just cast a word
var
s: char;
begin
PWord(@s)^ := $222b; // Forcibly write a word
据我所知,FPC的当前Unicode状态如下:
更新:2.7.1具有可变编码ansistring类型,并且已经修复了Lazarus以保持工作状态。但是,目前还没有真正利用它的地方,例如大多数RTL仍使用-A调用,并且接受字符串的sysutils和系统过程的原型尚未更改为rawbytestring。
var
S1: UCS4String;
S: string;
begin
SetLength(S1, 2);
S1[0]:= UCS4Char($1D15E);
S1[1]:= UCS4Char(0);
S:= UCS4StringToUnicodeString(S1);
ShowMessage(Format('%d, %x, %x', [Length(S), Ord(S[1]), Ord(S[2])]));
end;
U+1D15E
是一个稍微有点病态的例子,因为1D15E
不是一个单词(多了一个十六进制数字)。 - Andreas Rejbrand