gpt4 book ai didi

unicode - Prolog 中基本多语言平面 (BMP) 之外的转义字符

转载 作者:行者123 更新时间:2023-12-02 17:08:57 26 4
gpt4 key购买 nike

作为引用,我在 Windows 10 64 位上使用 Prolog v7.4.2

在 REPL 中输入以下代码:

write("\U0001D7F6"). % Mathematical Monospace Digit Zero

在输出中给我这个错误:

ERROR: Syntax error: Illegal character code
ERROR: write("
ERROR: ** here **
ERROR: \U0001D7F6") .

我确实知道 U+1D7F6 是有效的 Unicode 字符,那么怎么了?

最佳答案

SWI-Prolog 内部使用 C wchar_t 来表示 Unicode 字符。在 Windows 上,这些是 16 位的,旨在保存 UTF-16 编码的字符串。然而,SWI-Prolog 使用 wchar_t 来获取良好的代码点数组,因此实际上仅支持 Windows 上的 UCS-2(代码点 u0000..uffff)。

在非 Windows 系统上,wchar_t 通常为 32 位,因此支持完整的 Unicode 范围。

处理 wchar_t 时修复起来并不是一件小事,因为 UTF-16 失去了数组的每个元素恰好是一个代码点的良好属性,并且使用我们自己的 32 位类型意味着我们无法使用 C 库宽字符函数,必须在 SWI-Prolog 中重新实现它们。这不仅是工作,而且用纯 C 版本替换它们也会失去现代 C 运行时库中通常存在的优化。

关于unicode - Prolog 中基本多语言平面 (BMP) 之外的转义字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45677411/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com