unicodedata.name('x00')
引发ValueError
异常:
Python 3.8.10 (default, Sep 28 2021, 16:10:42)
[GCC 9.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information
>>> import unicodedata
>>> unicodedata.name('x00')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: no such name
x00
是 NUL 字符。为什么unicodedata.name('x00')
会引发异常?对于其他不可打印的 ASCII 字符(x00
到x1F
和x7F
),我遇到了同样的错误。unicodedata.name()
仅适用于可打印字符吗?如果是这样,Python 文档中在哪里提到它?
根据这篇维基百科文章,Cc
控制字符在 Unicode 中没有名称。您提到的所有字符都归类Cc
类别(您可以使用unicodedata.category
API进行确认)
>>> import unicodedata
>>> unicodedata.category('x00')
'Cc'
>>> unicodedata.category('x1F')
'Cc'
>>> unicodedata.category('x7F')
'Cc'
在 Unicode 中,"控制字符"是 U+0000—U+001F(C0 控制), U+007F(删除)和 U+0080—U+009F(C1 控制)。他们的将军 类别为"抄送"。格式代码在"常规"类别中是不同的 "呵呵"。
Cc
控制字符在 Unicod e 中没有名称,但被赋予 标签,例如"<control-001A>"
。
您还可以看到CONTROL 字符在 cpython 源代码中显式处理
如果你看一下 unicode 字符的名称是什么意思,它指的是这个列表:https://www.unicode.org/Public/13.0.0/ucd/NamesList.txt
如您所读,所有不可打印的 ASCII 控制字符都命名为"<control>
":"NULL
"不是 0000 的名称,而是别名。
现在,为什么Python不显示"<control>
"是另一个我无法回答的问题。