4

对于组合变音符号,它们是否算作字母?因为据我所知,它们只能与格式良好的 Unicode 中的其他字母组合。

ICU 函数确定 Unicode 代码点是否是字母只需要一个代码点,因此对于任何给定的代码点,它无法知道它们是否已与变音符号组合 - 或者如果它是变音符号,则它已与什么组合。我正在尝试使用类似的构造来实现类似于 Unicode 感知正则表达式的东西

while(is_letter(codepoint))

但是,我非常担心如果codepoint实际上是变音符号会发生什么,它将与以前的代码点和其他校对标记进行校对。

这样做安全吗?还是我必须明确查找并忽略变音符号和其他校对标记?

编辑:我真正需要做的是迭代characters,而不是codepoints

这个问题是 XY 问题的受害者。我需要就我的实际问题提出一个问题

4

1 回答 1

4

我不完全清楚你想要做什么,所以如果这不是你想要的答案,我提前道歉,但是:

对于组合变音符号,它们是否算作字母?

从广义上讲,变音符号被视为“标记”而不是“字母”。例如,U+0301 COMBINING ACUTE ACCENT,如<ś>,是“非空格标记”,是三种“标记”之一。然而,算作“字母”的“修饰字母”仍然可能被认为是变音符号;例如,U+02C0 MODIFIER LETTER GLOTTAL STOP,如<sˀ>,是一个“修饰符字母”。

如果您查看Unicode 字符数据库的主文件(警告:它是 1.3 MB 文本文件),您可以了解哪些字符被归类为“修饰符字母” LmMn“间距标记”(Ms)或“封闭标记”(Me)。

于 2011-11-26T21:03:16.660 回答