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

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

Например

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

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


person user3584604    schedule 29.04.2014    source источник
comment
Попробуйте: len("✮".decode("utf-8"))   -  person Grijesh Chauhan    schedule 29.04.2014
comment
Разве это не будет зависеть от используемого шрифта, а также от того, какие символы его окружают - что в целом вы пытаетесь сделать?   -  person mmmmmm    schedule 29.04.2014
comment
len("\xe2\x9c\xae".decode('UTF-8')) отлично работает в python2.7.5.   -  person Cthulhu    schedule 29.04.2014
comment
Здесь есть несколько способов определить длину (и ширину). Было бы полезно знать, для чего вам это нужно: например, вы пытаетесь определить, сколько символов будет помещаться в строке на экране?   -  person deltab    schedule 29.04.2014


Ответы (2)


Вы можете попробовать так:

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

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

person Rahul Tripathi    schedule 29.04.2014
comment
Даже это не обязательно учитывает воспринимаемые пользователем символы или кластеры графем; некоторые виды использования диакритических знаков не имеют представления с одной кодовой точкой. Я также не вижу, как UTF-8 (конкретно) входит в картину? - person ; 29.04.2014
comment
это также возвращает len(unicodedata.normalize('NFC', u'✮')) = 3 - person user3584604; 29.04.2014

Мой ответ на похожий вопрос:

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

person Simon Richter    schedule 29.04.2014
comment
Ширина рендеринга в пикселях — это отдельная тема. Я не вижу, чтобы это было задано. - person Thomas Weller; 29.04.2014
comment
Для моноширинного вывода текста стандартная ширина глифа — это наименьшая адресная единица, и нас интересуют кратные этой единице — это не так уж отличается от ширины в пикселях. - person Simon Richter; 29.04.2014