Вы сказали: у меня есть строка: «Я хочу получить длину манипуляции на основе позиций персонажа и так далее. Проблема в том, что первый ë подсчитывается дважды, или я полагаю, что ë находится в положении 0 и 'находится в позиции 1.
Первым шагом в работе над любой проблемой Юникода является точное определение того, что находится в ваши данные; не догадываюсь. В этом случае ваша догадка верна; это не всегда будет.
«Именно то, что находится в ваших данных»: используйте встроенную функцию repr () (для большего количества вещей помимо юникода). Полезное преимущество показа результата repr () в вашем вопросе заключается в том, что у ответчиков есть то, что у вас есть. Обратите внимание, что ваш текст отображается только в 4-х позициях вместо 5 с некоторыми браузерами / шрифтами - «e» и его диакритики, а «a» искажены вместе в одной позиции.
Вы можете использовать unicodedata .name (), чтобы рассказать вам, что каждый компонент.
Вот пример:
# coding: utf8
import unicodedata
x = u"ë́aúlt"
print(repr(x))
for c in x:
try:
name = unicodedata.name(c)
except:
name = "<no name>"
print "U+%04X" % ord(c), repr(c), name
Результаты:
u'\xeb\u0301a\xfalt'
U+00EB u'\xeb' LATIN SMALL LETTER E WITH DIAERESIS
U+0301 u'\u0301' COMBINING ACUTE ACCENT
U+0061 u'a' LATIN SMALL LETTER A
U+00FA u'\xfa' LATIN SMALL LETTER U WITH ACUTE
U+006C u'l' LATIN SMALL LETTER L
U+0074 u't' LATIN SMALL LETTER T
Теперь прочитайте @ bobince's ответ: -)