问问题
396 次
1 回答
1
Ragel 生成一段紧凑的源代码,嵌入到您最喜欢的语言中。这段代码不使用任何库,既不是由 Ragel 提供的,也不是语言标准库提供的。因此,它无法解析 UTF-8 或计算 UTF-8 字符串的长度。
但是,它可以做的是为您提供指向您感兴趣的字符串部分的指针。鉴于此,您可以使用您最喜欢的特定于语言的工具来计算它的 UTF-8 长度。例如,在 C++ 中,您可以使用 cxxtools 的Utf8Codec::do_length方法(或您能想到的任何其他库)€€
在 Ragel 代码返回给您之后获取片段的 UTF-8 长度。
正如 Wil Macaulay 和 Wincent Colaiuta 所讨论的,您还可以调整 Ragel 以使用 16 位字符并将 UCS-2 提供给它。使用 UCS-4 的 32 位字符应该会更好。
另一个角度可能是使用unicode2ragel.rb脚本生成处理 UTF-8 的状态机,并尝试对其进行修改以计算转换次数。(我不知道这是否可行,我自己从未使用过该状态机)。
于 2015-01-24T08:22:55.990 回答