2011-11-26 79 views
4

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

确定一个Unicode代码点是否为字母的ICU函数只需要一个代码点,因此对于任何给定的代码点,它无法知道它们是否与变音符号组合 - 或者它是变音符号,它是什么与...结合。我想实现一个支持Unicode的正则表达式类似的东西,使用像

while(is_letter(codepoint)) 

但是一个结构,我很担心什么事情发生,如果codepoint实际上是一个变音符号,这与进行整理之前的代码点和其他整理标记。

这是安全吗?或者我是否必须明确查找并忽略变音符和其他整理标记?

编辑:我真正需要做的是迭代字符,而不是码点

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

回答

4

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

对于组合变音符号,是他们算作信件?

从广义上讲,变音符号被计为“标记”而不是“字母”。例如,U + 0301 COMBINING ACUTE ACCENT,如< s&#x0301; >,是“非标记”,它是三种“标记”之一。然而,“修饰符字母”,其中被算作“字母”,但可能被认为是变音符号;例如,U + 02C0 MODIFIER LETTER GLOTTAL STOP,如< s&#x02C0; >,是一个“修饰字母”。

如果你通过the main file of the Unicode Character Database(警告:这是1.3 MB的文本文件),你可以得到哪些字符被列为“修改字母”(Lm),并为“非间距标记”(Mn)或“感间隔标记“(Ms)或”封闭标记“(Me)。