我刚刚发现了来自IANA的这种奇怪的行为解析数据。
"ǃ".isalpha() # returns True
"!".isalpha() # returns False显然,这两个感叹号是不同的:
In [62]: hex(ord("ǃ"))
Out[62]: '0x1c3'
In [63]: hex(ord("!"))
Out[63]: '0x21'只是想知道有什么办法可以防止这种情况发生吗?这种行为的根源是什么?
发布于 2021-06-24 10:01:26
检查Unicode数据库中的字符。感叹号样的ǃ (\u1c3)是一个字母:
import unicodedata
for c in "!ǃ":
print(c,'{:04x}'.format(ord(c)),unicodedata.category(c), unicodedata.name(c))!0021 Po感叹号马克ǃ01c3 Lo拉丁字母倒带点击
发布于 2021-06-24 08:41:14
从医生那里:
str.isalpha()
如果字符串中的所有字符都是字母,并且至少有一个字符,否则返回True。字母字符是在Unicode 字符数据库中定义为“字母”的字符,即具有“Lm”、“Lt”、“Lu”、“Ll”或“Lo”的一般类别属性的字符。请注意,这与Unicode标准中定义的“字母”属性不同。
这意味着您使用的utf字符定义为utf数据库中的字母。
>>> ord("ǃ")
451看看维基百科UTF字符列表,字符ǃ属于拉丁文扩展B,这就是isalpha返回True的原因
https://stackoverflow.com/questions/68112289
复制相似问题