How to get a "screen" length of a multibyte string?

Hans Mulder hansmu at xs4all.nl
Sun Nov 25 06:31:04 EST 2012


On 25/11/12 11:19:18, kobayashi wrote:
> Hello,
> 
> Under platform that has fixed pitch font,
> I want to get a "screen" length of a multibyte string
> 
> --- sample ---
> s1 = u"abcdef"
> s2 = u"あいう" # It has same "screen" length as s1's.
> print len(s1)  # Got 6
> print len(s2)  # Got 3, but I want get 6.
> --------------
> 
> Abobe can get a "character" length of a multibyte string.
> Is there a way to get a "screen" length of a multibyte string?

How about:

from unicodedata import east_asian_width

def screen_length(s):
    return sum(2 if east_asian_width(c) == 'W' else 1 for c in s)


Hope this helps,

-- HansM



More information about the Python-list mailing list