Продолжительность аудио файла Safari = бесконечность - как это исправить?

Проблема заключается в том, что первый ë отсчитывается дважды, или я думаю, что ë находится в положении 0 и 'находится в позиции 1.

Да. Вот как код указывает на Unicode. В общем, вы можете попросить Python преобразовать букву и отдельную «комбинирующую» диакритическую метку, такую ​​как U + 0301 COMBINING ACUTE ACCENT, используя нормализацию Unicode:

>>> unicodedata.normalize('NFC', u'a\u0301')
u'\xe1' # single character: á

Однако в Unicode нет единого символа для «С диарезисом и острым акцентом», потому что ни один язык в мире никогда не использовал букву «ë». (Транслитерация пиньинь имеет «u с диарезисом и острым акцентом», но не «e».) Следовательно, поддержка шрифтов оставляет желать лучшего; во многих случаях это очень плохо отражается и является беспорядочным блобом в моем веб-браузере.

Чтобы определить, где «редактируемые точки» в строке кодовых точек Юникода - это сложная работа, требующая довольно многого о доменном знании языков. Это часть вопроса о «сложном текстовом макете», области, которая также включает в себя такие вопросы, как двунаправленный текст и контекстуальное шейпинг и лигатуры. Для выполнения сложного текстового макета вам понадобится библиотека, такая как Uniscribe в Windows или Pango вообще (для которой есть интерфейс Python).

Если, с другой стороны, вы просто хотите полностью игнорировать все сочетая символы при выполнении подсчета, вы можете легко избавиться от них:

def withoutcombining(s):
    return ''.join(c for c in s if unicodedata.combining(c)==0)

>>> withoutcombining(u'ë́aúlt')
'\xeba\xfalt' # ëaúlt
>>> len(_)
5
0
задан Merc 1 March 2019 в 14:21
поделиться