2011-11-26 74 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)。