все Python 3unicodedataфункция
unicodedata.east_asian_width()
свойства символов
Возвращает ширину символа по восточноазиатской классификации: 'W' и 'F' занимают две клетки терминала, 'Na' и 'H' — одну, 'A' — неоднозначно.
Синтаксис
unicodedata.east_asian_width(chr, /)
len() считает кодовые точки, а не экранную ширину: '中文' — это 2 символа и 4 клетки, поэтому выравнивание ljust() с иероглифами и эмодзи разъезжается. Кириллица — 'A' (неоднозначная): в западном терминале одна клетка, в китайском или японском — две. Простая оценка ширины: 2 для 'W' и 'F', 1 для остального.
Примеры
import unicodedata
print([unicodedata.east_asian_width(c) for c in 'a中й']) # → ['Na', 'W', 'A']
def width(text):
return sum(2 if unicodedata.east_asian_width(c) in 'WF' else 1 for c in text)
print(len('中文ab'), width('中文ab')) # → 4 6
См. также
Открыть в полном глоссарииdocs.python.orgСообщить о неточности