Python返回单个非ASCI字符串的长度为2

2024-04-20 08:55:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试获取字符串中所选单词的范围。使用İ字符时,我注意到Python的以下行为:

len("İ")
Out[39]: 1

len("İ".lower())
Out[40]: 2

# when `upper()` is applied, the length stays the same
len("İ".lower().upper())
Out[41]: 2

为什么同一个字符的大小写值的长度不同(这对我来说似乎非常混乱/不需要)

有人知道会不会有其他角色出现这种情况吗? 谢谢大家!

编辑:

另一方面,例如Î长度保持不变:

len('Î')
Out[42]: 1

len('Î'.lower())
Out[43]: 1

Tags: the字符串角色lenisout字符单词
2条回答

这是因为小写的'İ''i̇',它有两个字符

>>> import unicodedata
>>> unicodedata.name('İ')
'LATIN CAPITAL LETTER I WITH DOT ABOVE'
>>> unicodedata.name('İ'.lower()[0])
'LATIN SMALL LETTER I'
>>> unicodedata.name('İ'.lower()[1])
'COMBINING DOT ABOVE'

一个字符是一个组合点,您的浏览器可能会渲染它与上一个引号重叠,因此您可能无法看到它。但是如果您将它复制粘贴到python控制台中,您应该能够看到它


如果您尝试:

print('i̇'.upper())

你应该

İ

我认为问题在于该符号的小写字符在ASCII中没有定义

.lower()函数可能对与字符相关联的ASCII数执行固定偏移量,因为这适用于英语字母表

相关问题 更多 >