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



我正在尝试获取字符串中所选单词的跨度。在使用İ字符时,我注意到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

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

>>> 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数字执行固定偏移,因为这适用于英文字母表。

相关内容

  • 没有找到相关文章

最新更新