对于组合变音符号,它们是否被视为字母?因为,据我所知,它们只能与格式良好的Unicode中的其他字母组合。
用于确定Unicode代码点是否只是一个字母的ICU函数只需要一个代码点,因此对于任何给定的代码点,它无法知道它们是否与变音符号组合 - 或者如果它是变音符号,它是什么结合。我正在尝试使用类似
的构造实现类似于Unicode感知的正则表达式的东西while(is_letter(codepoint))
然而,我非常担心如果codepoint
实际上是一个变音符号,将与之前的代码点和其他整理标记进行整理,会发生什么。
这样做安全吗?或者我是否必须明确地找到并忽略变音符号和其他整理标记?
编辑:我真正需要做的是迭代字符,而不是代码点。
这个问题是XY问题的受害者。我需要提出一个关于我的实际问题的问题。
答案 0 :(得分:4)
我不清楚你要做什么,所以如果这不是你想要的答案我会提前道歉,但是:
对于组合变音符号,它们是否算作字母?
从广义上讲,变音符号被视为“标记”而不是“字母”。例如,U + 0301 COMBINING ACUTE ACCENT,如在<ś>中,是“非间距标记”,它是三种“标记”之一。然而, 计为“字母”的“修饰字母”可能被认为是变音符号;例如,U + 02C0 MODIFIER LETTER GLOTTAL STOP,如<sˀ>,是一个“修饰符字母”。
如果查看the main file of the Unicode Character Database(警告:它是1.3 MB的文本文件),您可以了解哪些字符被归类为“修饰符字母”(Lm
),哪些字符为“非缩略图”标记“(Mn
)或”间距标记“(Ms
)或”封闭标记“(Me
)。