为何unicodedata.name()对部分ASCII字符抛出ValueError: no such name异常
问题原因
unicodedata.name() 函数的作用是返回指定Unicode字符的官方标准名称,你遇到的报错本质是:ASCII控制字符(范围U+0000到U+001F,以及代表DEL的U+007F)在Unicode规范中没有分配正式的官方名称,因此函数找不到匹配的名称,就会抛出ValueError: no such name异常。
这个限制不是针对所有不可打印字符,其他有官方名称的不可打印字符(比如很多Unicode格式控制符)依然可以通过这个函数查询到名称,仅没有注册官方名称的字符会触发报错。
官方文档说明
Python官方unicodedata模块的文档中对name()方法的定义明确提到:
若字符没有官方名称,抛出
ValueError;如果传入了第二个default参数,找不到名称时会返回该参数值而不是抛出异常。
你也可以通过传入默认值的方式避免报错,示例:
# 不会抛出异常,返回自定义默认值 unicodedata.name('\x00', '无官方名称')
如果需要识别这些控制字符,可以用unicodedata.category()查询字符类别,控制字符的返回值固定为Cc,示例:
unicodedata.category('\x00') # 返回 'Cc'
内容的提问来源于stack exchange,提问作者Flux
相关产品推荐
相关产品推荐

