fatal error: high- and low-surrogate code points are not valid Unicode scalar values
fatal error: high- and low-surrogate code points are not valid Unicode scalar values
有时在使用 57292
等值初始化 UnicodeScalar
时会产生以下错误:
fatal error: high- and low-surrogate code points are not valid Unicode scalar values
这是什么错误,为什么会发生,以后我该如何预防?
背景:UTF-16 将 Unicode 字符序列 ("code points") 表示为 16 位序列 "code units"。对于标量值在 16 位以内的字符(即从 U+0000 到 U+FFFF 的字符),代码单元与字符具有相同的值;但对于超出该范围的字符(从 U+10000 到 U+10FFFF 的字符),UTF-16 必须使用两个代码单元。为了实现这一点,Unicode 保留了一系列代码点(U+D800 到 U+DFFF)作为 "surrogates",不能用作字符;然后,UTF-16 可以同时使用其中两个代理项来表示 16 位范围之外的代码点。 ("high" 和 "low" 指的是在这些对中分别充当 first 和 second 代码单元的代理项. 每个代理项要么是高代理项,要么是低代理项,但不能两者兼而有之;旧字符集的经验表明,始终能够分辨出一个字符的结束位置和下一个字符的开始位置非常有用。)
所以您遇到的问题是您正在尝试创建一个 UnicodeScalar
,其值 (U+DFCC) 根据 Unicode 标准保留给 not 是一个 Unicode 标量。 U+DFCC 被定义为不存在,只是 "surrogate" 表示存在的标量的一半。
为防止出现此问题,您需要坚持使用确实存在的标量 — U+0000 到 U+D7FF 和 U+E000 到 U+10FFFF。
有时在使用 57292
等值初始化 UnicodeScalar
时会产生以下错误:
fatal error: high- and low-surrogate code points are not valid Unicode scalar values
这是什么错误,为什么会发生,以后我该如何预防?
背景:UTF-16 将 Unicode 字符序列 ("code points") 表示为 16 位序列 "code units"。对于标量值在 16 位以内的字符(即从 U+0000 到 U+FFFF 的字符),代码单元与字符具有相同的值;但对于超出该范围的字符(从 U+10000 到 U+10FFFF 的字符),UTF-16 必须使用两个代码单元。为了实现这一点,Unicode 保留了一系列代码点(U+D800 到 U+DFFF)作为 "surrogates",不能用作字符;然后,UTF-16 可以同时使用其中两个代理项来表示 16 位范围之外的代码点。 ("high" 和 "low" 指的是在这些对中分别充当 first 和 second 代码单元的代理项. 每个代理项要么是高代理项,要么是低代理项,但不能两者兼而有之;旧字符集的经验表明,始终能够分辨出一个字符的结束位置和下一个字符的开始位置非常有用。)
所以您遇到的问题是您正在尝试创建一个 UnicodeScalar
,其值 (U+DFCC) 根据 Unicode 标准保留给 not 是一个 Unicode 标量。 U+DFCC 被定义为不存在,只是 "surrogate" 表示存在的标量的一半。
为防止出现此问题,您需要坚持使用确实存在的标量 — U+0000 到 U+D7FF 和 U+E000 到 U+10FFFF。