【问题标题】:Is there any way to check whether an ordinal position contains a character or is empty?有没有办法检查序数位置是否包含字符或为空?
【发布时间】:2015-06-12 14:57:43
【问题描述】:

如果我使用带有unichr(orninal) 的序号打印一个字符,并且序号位置不包含任何有效字符,结果将是:

>>> print unichr(0x0c80)
ಀ

现在我想从字符串中过滤出这样的空字符,我尝试str.encode('utf-8', errors='ignore') 为:

>>> print ''.join([unichr(i) for i in range(0x0c80, 0x0cff)]).encode('utf-8', errors='ignore')
ಀಁಂಃ಄ಅಆಇಈಉಊಋಌ಍ಎಏಐ಑ಒಓಔಕಖಗಘಙಚಛಜಝಞಟಠಡಢಣತಥದಧನ಩ಪಫಬಭಮಯರಱಲಳ಴ವಶಷಸಹ಺಻಼ಽಾಿೀುೂೃೄ೅ೆೇೈ೉ೊೋೌ್೎೏೐೑೒೓೔ೕೖ೗೘೙೚೛೜ೝೞ೟ೠೡೢೣ೤೥೦೧೨೩೪೫೬೭೮೯೰ೱೲೳ೴೵೶೷೸೹೺೻೼೽೾

但空字符仍然存在。有没有办法过滤这些字符?

【问题讨论】:

  • 您提出的问题比您想象的要复杂得多。那不是“空字符”。它只是一个字符,您安装的所有字体都没有可用的字形。 “字符”本身既不是无效也不是“空”,代码点可能根本不被使用。

标签: string python-2.7 unicode


【解决方案1】:
>>> import unicodedata
>>> unicodedata.category(unichr(0x08C0))
'Cn'

Cn 是为尚未分配给任何字符的代码点返回的类别。 (但是,不能保证它不会在未来的 Unicode 版本中分配。)

【讨论】:

  • 同样重要:>>> unicodedata.unidata_version'x.y.z'
  • unicodedata.category(Unicode(0x08C0)) 抛出此错误:NameError: name 'Unicode' is not defined
  • @BHATIRSHAD 改用这个unicodedata.category(unicode(unichr(0x0c80)))
  • 抱歉,应该是unichr。不确定我是否打错了,或者 SO 的自动更正是否让我失望了……
猜你喜欢
  • 1970-01-01
  • 2016-09-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-12-04
  • 1970-01-01
  • 2012-11-12
  • 2019-06-06
相关资源
最近更新 更多