Получить "фактическую" длину строки в символах Юникода

Например, для символа типа "" (\xe2\x9c\xae) могут быть другие, такие как "Σ", "д" или "Λ" ). Я хочу найти "фактическое" длина, которую принимает символ при печати на экране

например

len("✮")
len("\xe2\x9c\xae")

оба возвращают 3, но это должно быть 1

Ответ 1

Вы можете попробовать следующее:

unicodedata.normalize('NFC', u'✮')
len(u"✮")

UTF-8 - это кодировка юникода, которая использует более одного байта для специальных символов. Проверьте unicodedata.normalize()

Ответ 2

Мой ответ на аналогичный вопрос:

Вы ищете ширину рендеринга из текущего контекста вывода. Для графических пользовательских интерфейсов обычно существует метод прямого запроса этой информации; для текстовых сред все, что вы можете сделать, это угадать, что, вероятно, сделает механизм совместимости рендеринга, и надеемся, что фактический движок соответствует вашим ожиданиям.