python - 为什么 python string cut 在请求 12 个符号时返回 11 个符号?

标签 python string python-2.7 unicode

我在 OSX 10.9 上使用 python 2.7 并想将 unicode 字符串 ( 05. Чайка.mp3 ) 剪切 12 个符号,所以我使用 mp3file[:12]将其切割 12 个符号。但结果我得到了像 05. Чайка.m 这样的字符串, 只有 11 个符号。但是len(mp3file[:12])返回 12。看起来问题出在俄语符号 й 上.

这里可能有什么问题?

这个的主要问题 - 我无法正常显示带有 {:<12}'.format(mp3file[:12]) 的字符串.

最佳答案

您有带有组合字符的 unicode 文本:

u'05. \u0427\u0430\u0438\u0306\u043a\u0430.m'

U+0306是一个 COMBINING BREVE 代码点,̆,它与前面的 и CYRILLIC SMALL LETTER I 组合在一起形成:

>>> print u'\u0438'
и
>>> print u'\u0438\u0306'
й

您可以 normalize that to the combined form , U+0439 CYRILLIC SMALL LETTER SHORT I相反:

>>> import unicodedata
>>> unicodedata.normalize('NFC', u'\u0438\u0306')
u'\u0439'

这使用了 unicodedata.normalize() function产生一个组合的范式。

关于python - 为什么 python string cut 在请求 12 个符号时返回 11 个符号?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23322952/

相关文章:

python - 如何在 Pyspark 中创建虚拟(0 字节)HDFS 文件

python - Python 2.7 中的 FFT 合并两个代码

python - 将 Pandas Dataframe 或 csv 文件转换为自定义嵌套 JSON

python - 如何在3D numpy数组中堆叠多个2D numpy数组

java - 删除字符串中特定位置的字符

java - 如何使用 'matches()' 方法查看字符串是否与格式匹配

python - 子应用程序中 'self' 的外键在 Django 项目中的 makemigrations 上抛出错误

python - 如何只获取MySQL表中的字段?

python - 如何计算 Pandas 数据框中的元音和辅音(大写和小写)?

c# - 我应该使用转换类吗?