是否有C++
函數可用來決定給定的Unicode點是否是字母?我的意思是在正則表達式中經常被描述爲\p{L}
。因此,它可以是拉丁文,希臘文,西里爾文或其他字母,而不是標點符號,數字等,它們在unicode中也可以由其他幾個大碼點範圍表示。C++函數用於判斷一個unicode點是否是'字母'而不是標點符號
所以我要問的一個類似的功能:
bool isUnicodeLetter(int32 codepoint);
也許在升壓或ICU庫?
是否有C++
函數可用來決定給定的Unicode點是否是字母?我的意思是在正則表達式中經常被描述爲\p{L}
。因此,它可以是拉丁文,希臘文,西里爾文或其他字母,而不是標點符號,數字等,它們在unicode中也可以由其他幾個大碼點範圍表示。C++函數用於判斷一個unicode點是否是'字母'而不是標點符號
所以我要問的一個類似的功能:
bool isUnicodeLetter(int32 codepoint);
也許在升壓或ICU庫?
在ICU4C,函數被調用u_isalpha()
:
UBool u_isalpha(UChar32 c)
確定指定的碼點是否爲字母字符。
對於一般類別「L」(字母)爲真。
但是在使用時要小心,因爲它很容易被誤用。 u_isalpha()
和uchar.h
中的其他函數僅用於提供對Unicode字符數據的低級訪問。
請注意,該函數的名稱具有欺騙性,因爲它測試代碼點是否具有「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
@tchrist:我對這個功能很滿意。爲什麼名稱具有欺騙性?它測試任何字母屬性。你還想要什麼? – Frank
那麼,我會希望它測試Unicode'alpha'屬性,這是別的。這隻適用於拉丁腳本,因爲其他人具有「Other_Alphabetic」屬性的非'LETTER'代碼點。在一些腳本中,僅僅測試簡單的字母是沒有用的。字母不只是Unicode中的字母。抱歉。 – tchrist
[This question](http://stackoverflow.com/questions/3378343/isalpha-equivalent-for-wchar-t)看起來很相似。 –
處理Unicode的函數永遠不會採用單個代碼點,就好像所有字符都可以表示爲單個代碼點(因爲並非所有代碼都可以)。你需要像'bool isUnicodeLetter(std :: u32string character);'這樣的函數。如果你發現一個函數需要一個代碼點,那麼一定不要使用它,因爲它必然是錯誤的。 – bames53
@ barnes53:這似乎與Daniel Trebbien的答案相矛盾。 ICU圖書館是高度重視的標準unicode圖書館。你是說他們錯了嗎? – Frank