哪些 unicode 代码可以安全地用作保留值?
Which unicode code can be used safely as reserved value?
背景
我正在编写基于 DFA 的正则表达式解析器,出于性能原因,我需要使用字典 [Unicode.Scalar : State]
来映射下一个状态。现在我需要一堆特殊的 unicode 值来表示特殊的字符表达式,如 .
、\w
、\d
...
我的问题
为此目的使用哪些 unicode 值是安全的?
我用 U+0000
代替 .
,但我现在需要更多。我检查了 unicode 文档,Noncharacters 似乎很有希望,但在 swift 中,这些被认为是无效的 unicode。例如,下面的代码给我一个编译器错误 Invalid unicode scalar
.
let c = "\u{FDD0}"
如果你坚持使用Unicode.Scalar
,什么都没有。 Unicode.Scalar
旨在表示 Unicode 中的所有有效字符,包括 尚未分配 代码点。因此,它不能表示 noncharacters 也不能表示悬空代理项("\u{DC00}"
也会导致错误)。
而在 Swift 中,String
可以包含所有有效的 Unicode.Scalar
,包括 U+0000
。例如 "\u{0000}"
(== "[=17=]"
) 是一个有效的字符串,它的长度 (count
) 是 1。使用 U+0000
作为元字符,你的代码不会使用有效的 Swift 字符串。
考虑使用 [UInt32: State]
而不是 [Unicode.Scalar: State]
。 Unicode 仅使用 0x0000...0x10FFFF
(包括非字符),因此使用大于 0x10FFFF
的值是 安全的(按您的意思)。
同时获得 value
属性 of Unicode.Scalar
的成本非常小,在优化代码中可以忽略其成本。我不确定使用 Dictionary
是否真的是处理您的要求的好方法,但 [UInt32: State]
是否与 [Unicode.Scalar: State]
.
一样有效
背景
我正在编写基于 DFA 的正则表达式解析器,出于性能原因,我需要使用字典 [Unicode.Scalar : State]
来映射下一个状态。现在我需要一堆特殊的 unicode 值来表示特殊的字符表达式,如 .
、\w
、\d
...
我的问题
为此目的使用哪些 unicode 值是安全的?
我用 U+0000
代替 .
,但我现在需要更多。我检查了 unicode 文档,Noncharacters 似乎很有希望,但在 swift 中,这些被认为是无效的 unicode。例如,下面的代码给我一个编译器错误 Invalid unicode scalar
.
let c = "\u{FDD0}"
如果你坚持使用Unicode.Scalar
,什么都没有。 Unicode.Scalar
旨在表示 Unicode 中的所有有效字符,包括 尚未分配 代码点。因此,它不能表示 noncharacters 也不能表示悬空代理项("\u{DC00}"
也会导致错误)。
而在 Swift 中,String
可以包含所有有效的 Unicode.Scalar
,包括 U+0000
。例如 "\u{0000}"
(== "[=17=]"
) 是一个有效的字符串,它的长度 (count
) 是 1。使用 U+0000
作为元字符,你的代码不会使用有效的 Swift 字符串。
考虑使用 [UInt32: State]
而不是 [Unicode.Scalar: State]
。 Unicode 仅使用 0x0000...0x10FFFF
(包括非字符),因此使用大于 0x10FFFF
的值是 安全的(按您的意思)。
同时获得 value
属性 of Unicode.Scalar
的成本非常小,在优化代码中可以忽略其成本。我不确定使用 Dictionary
是否真的是处理您的要求的好方法,但 [UInt32: State]
是否与 [Unicode.Scalar: State]
.