2012-08-24 71 views
1

是否有C++函數可用來決定給定的Unicode點是否是字母?我的意思是在正則表達式中經常被描述爲\p{L}。因此,它可以是拉丁文,希臘文,西里爾文或其他字母,而不是標點符號,數字等,它們在unicode中也可以由其他幾個大碼點範圍表示。C++函數用於判斷一個unicode點是否是'字母'而不是標點符號

所以我要問的一個類似的功能:

bool isUnicodeLetter(int32 codepoint); 

也許在升壓或ICU庫?

+0

[This question](http://stackoverflow.com/questions/3378343/isalpha-equivalent-for-wchar-t)看起來很相似。 –

+1

處理Unicode的函數永遠不會採用單個代碼點,就好像所有字符都可以表示爲單個代碼點(因爲並非所有代碼都可以)。你需要像'bool isUnicodeLetter(std :: u32string character);'這樣的函數。如果你發現一個函數需要一個代碼點,那麼一定不要使用它,因爲它必然是錯誤的。 – bames53

+0

@ barnes53:這似乎與Daniel Trebbien的答案相矛盾。 ICU圖書館是高度重視的標準unicode圖書館。你是說他們錯了嗎? – Frank

回答

3

在ICU4C,函數被調用u_isalpha()

UBool u_isalpha(UChar32 c) 

確定指定的碼點是否爲字母字符。

對於一般類別「L」(字母)爲真。

但是在使用時要小心,因爲它很容易被誤用。 u_isalpha()uchar.h中的其他函數僅用於提供對Unicode字符數據的低級訪問。

+0

請注意,該函數的名稱具有欺騙性,因爲它測試代碼點是否具有「Alphabetic = Yes」Unicode字符屬性;它僅測試是否它具有'General_Category = Letter'屬性,它本身是任何'General_Category = Lowercase_Letter', 'General_Category = Modifier_Letter', 'General_Category = Other_Letter', 'General_Category = Titlecase_Letter', 'General_Category =的Uppercase_Letter',沒有別的。 – tchrist

+0

@tchrist:我對這個功能很滿意。爲什麼名稱具有欺騙性?它測試任何字母屬性。你還想要什麼? – Frank

+0

那麼,我會希望它測試Unicode'alpha'屬性,這是別的。這隻適用於拉丁腳本,因爲其他人具有「Other_Alphabetic」屬性的非'LETTER'代碼點。在一些腳本中,僅僅測試簡單的字母是沒有用的。字母不只是Unicode中的字母。抱歉。 – tchrist

相關問題