在Python中,我可以通过名称打印一个Unicode字符(例如:print(u'\N{snowman}')
)。有没有一种方法可以获取所有有效名称的列表?
unicodedata.unidata_version
属性告诉您给定Python运行时使用的版本。上述链接指向最新发布的Unicode版本,请将URL中的UCD/latest
替换为您的Python版本的unicodedata.unidata_version
的值。unicodedata.name()
函数 可以告诉您正式名称,而 unicodedata.lookup()
则可逆(名称到编码点)。name
和 lookup
真的是互逆的吗?确实,name(lookup('space'))
返回 SPACE
。但是 lookup('escape')
返回预期值,而 name(lookup('escape'))
引发 ValueError: no such name
。 - Jeyekomonescape
是一个别名。lookup()
接受名称、别名(和序列),但 name()
只返回官方名称。大多数控制字符(如 escape)没有名称。请注意,space
是一个别名,名称始终是大写的。维基百科有一个很好的概述,说明哪些字符没有名称。 - Martijn PietersNamesList.txt
需要一些时间才能下载(大小> 1.5 MB)。21FE RIGHTWARDS OPEN-HEADED ARROW
21FF LEFT RIGHT OPEN-HEADED ARROW
@@ 2200 Mathematical Operators 22FF
@@+
@ Miscellaneous mathematical symbols
2200 FOR ALL
= universal quantifier
2201 COMPLEMENT
x (latin letter stretched c - 0297)
2202 PARTIAL DIFFERENTIAL
2203 THERE EXISTS
= existential quantifier
2204 THERE DOES NOT EXIST
: 2203 0338
2205 EMPTY SET
= null set
* used in linguistics to indicate a null morpheme or phonological "zero"
x (latin capital letter o with stroke - 00D8)
x (diameter sign - 2300)
~ 2205 FE00 zero with long diagonal stroke overlay form
是的,有一种方法。 遍历所有现有的代码点,并在每个代码点上调用 unicodedata.name()
。 就像这样:
names = []
for c in range(0, 0x10FFFF + 1):
try:
names.append(unicodedata.name(c))
except KeyError:
pass
# Do something with names
except ValueError
而不是except KeyError
。https://docs.python.org/3/library/unicodedata.html#unicodedata.name - Dominique Unruhunicodedata.name
。要获取所有这些名称,您可以处理所有数十亿个字符以查看哪些具有此类名称。import unicodedata
for i in range(0x110000):
character = chr(i)
name = unicodedata.name(character, "")
if len(name) > 0:
print(f"{i:6} | 0x{i:04X} | {character} | {name}")
这是我的一行代码,只是为了自己的参考;p
import unicodedata
names = [unicodedata.name(chr(c)) for c in range(0, 0x10FFFF+1) if unicodedata.name(chr(c), None)]
如果您想按名称插入Unicode字符,但不知道其名称,以下是如何轻松查看Unicode字符名称的方法。
在Windows上
在Mac上,它称为“字符调色板”,可以在“系统偏好设置”,“国际化->输入”或“语言和文本->输入源”下通过选中“字符调色板”旁边的框来找到。