2015-09-12 12 views
3

在Python 3中識別Unicode專用字符的正確方法是什麼?在模塊unicodedata中沒有任何明顯的相關性,這使得查找字符名稱和屬性變得容易。使用python檢測Unicode專用區字符

某些背景:unicodedata.name()(其中給出unicode字符的名稱),如果使用專用字符(例如,嘗試unicodedata.name("\uf026"))調用,將引發ValueError。但空格字符(空間本身除外)以及可能的其他事物也會觸發和異常。那麼檢測PUA字符的方法是什麼?

回答

5

自用的人物都是在Cogeneral category,如unicodedata返回由category()

>>> import unicodedata 
>>> def is_pua(c): 
... return unicodedata.category(c) == 'Co' 
... 
>>> is_pua(u'\uF026') 
True 

鑑於Unicode標準guarantees了一套私人使用的字符將從未變化(沒有字符會已被添加或刪除),對硬編碼也是安全的three ranges

  • U+E000U+F8FF
  • U+F0000U+FFFFD
  • U+100000U+10FFFD
+0

有道理。但是真的沒有庫方法已經完成了這個簡單的計算? (例如,以字符類的形式) – alexis

+0

我忘記了它們也處於相同的'category()'中,這可能更清潔一些。 –

+0

嗯,我已經嘗試過'category()',但是雙字母代碼的含義(我試過的代碼點的'Co')似乎沒有記錄在'unicodedata'中。難道只有PUA角色有'Co'類別嗎?這確實是一個很好的解決方案。 – alexis

相關問題