HTML 字符实体和 Delphi 之间的数值等价?

Numeric equivalence between HTML Character Entities and Delphi?

HTML角色实体𝕒

可以使用此 HTML 代码从号码 120146 创建:

<!DOCTYPE html>
<html>
<style>
body {
    font-size: 20px;
}
</style>
<body>

<p>I will display &#120146;</p>

</body>
</html>

这些扩展字符符号中的一些可以在 HTML 和 Delphi 10.1.2 中从相同的数字值创建。例如:

&#174;Chr(174) 都创建了 "registered trademark" 符号字符 ®

&#163;Chr(163) 都创建了 "pound" 符号字符 £

等等

不幸的是,上面的数字 120146 不是这种情况,其中 Delphi 中的 Chr(120146) 创建了一个 "funny Chinese symbol".

那么如何从Delphi中的数字120146创建上面的&aopf;字符符号呢? HTML 和 Delphi 之间的上述数值等价在哪个数值范围内有效或无效?

这是'MATHEMATICAL DOUBLE-STRUCK SMALL A' (U+1D552)。它在基本多语言平面之外,因此在 UFT-16 中使用代理对进行编码。这意味着需要两个 UTF-16 字符元素。

看看你的尝试:Chr(120146)。现在,120146 > high(Word) (= 65535) 告诉您您的代码无法成功。请记住,每个 UTF-16 字符元素的大小都是 16 位。如果编译器对此发出警告就好了。是吗?

上面的link告诉你如何编码。它由这个代理对给出:

0xD835 0xDD52

在 Delphi 中最容易写成:

#$D835#$DD52

如果您以 UTF-32 代码作为数值开始,那么您可以使用 System.Character 单元中的 TCharacter.ConvertFromUtf32 将其转换为 Delphi 字符串:

TCharacter.ConvertFromUtf32(D552)

显然这个函数的参数可以是一个变量。

如果以上 Unicode 术语中的大部分您都不了解,请阅读这些文章: