致命错误:高代理代码点和低代理代码点不是有效的 Unicode 标量值 [重复]

2023-12-20

有时在初始化时UnicodeScalar其值类似于57292产生以下错误:

fatal error: high- and low-surrogate code points are not valid Unicode scalar values

这是什么错误,为什么会发生以及将来如何防止它发生?


背景:UTF-16 将 Unicode 字符(“代码点”)序列表示为 16 位“代码单元”序列。对于标量值在 16 位以内的字符(即从 U+0000 到 U+FFFF 的字符),代码单元具有与字符相同的值;但对于该范围之外的字符(从 U+10000 到 U+10FFFF 的字符),UTF-16 必须使用两个代码单元。为了实现这一点,Unicode 保留了一系列代码点(U+D800 到 U+DFFF)作为“代理”,它们不能用作字符;然后,UTF-16 可以一起使用其中两个代理项来表示 16 位范围之外的代码点。 (“高”和“低”是指充当first and second这些对中的代码单元分别。每个代理要么是高代理,要么是低代理,但不能同时是两者;使用旧字符集的经验表明,始终能够分辨出一个字符在哪里结束以及下一个字符在哪里开始是非常有用的。)

所以你看到的问题是你正在尝试创建一个UnicodeScalar具有一个值 (U+DFCC),根据 Unicode 标准,保留该值not是 Unicode 标量。 U+DFCC 被定义为不存在,并且只是存在的标量的一半的“替代”。

为了防止出现此问题,您需要坚持使用确实存在的标量 — U+0000 到 U+D7FF 和 U+E000 到 U+10FFFF。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

致命错误:高代理代码点和低代理代码点不是有效的 Unicode 标量值 [重复] 的相关文章

随机推荐