至少在Python 2中,unicodedata.name()
不识别某些字符.
ActivePython 2.7.0.2 (ActiveState Software Inc.) based on
Python 2.7 (r27:82500, Aug 23 2010, 17:17:51) [MSC v.1500 64 bit (AMD64)] on win
32
Type "help", "copyright", "credits" or "license" for more information.
>>> from unicodedata import name
>>> print(u'\n')
>>> name(u'\n')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: no such name
>>> name(u'a')
'LATIN SMALL LETTER A'
>>>
Run Code Online (Sandbox Code Playgroud)
(第一个print
是证明Python本身可以识别u'\n'
为换行符.)
当然Unicode 包含字符\n
,它有一个名称,特别是"LINE FEED".
NB.unicodedata.lookup('LINE FEED')
并且unicodedata.lookup(u'LINE FEED')
都给出了KeyError:未定义的字符名称.
所述unicodedata.name()
查找依赖于第2列中的标准UnicodeData.txt数据库(Python 2.7版使用Unicode 5.2.0).
如果该名称以<
它开头,则忽略它.所有控制代码,包括换行符,都属于该类别; 第一列没有其他名称<control>
:
000A;<control>;Cc;0;B;;;;;N;LINE FEED (LF);;;;
Run Code Online (Sandbox Code Playgroud)
第10列是旧的 Unicode 1.0名称,根据标准不应使用.换句话说,\n
没有名字,比一般的其他<control>
,这Python的数据库忽略(因为它不是唯一的).
Python 3.3增加了对NameAliases.txt的支持,它允许你通过别名查找名称; 所以lookup('LINE FEED')
,lookup('new line')
还是lookup('eol')
等等,所有的参考\n
.但是,该unicodedata.name()
方法不支持别名,也不支持别名(它会选择哪个?):
- 添加了对Unicode名称别名和命名序列的支持.无论
unicodedata.lookup()
和'\N{...}'
现在解决的名字别名和unicodedata.lookup()
命名序列也做出决议.
TL; DR:LINE FEED
不是官方名称\n
,它只是它的别名.Python 3.3及更高版本允许您按别名查找字符.
归档时间: |
|
查看次数: |
1340 次 |
最近记录: |