亚历克斯桑顿提到的,使用unicodedata.east_asian_width()
是正确的。然而,它具有以下的返回值:
# East_Asian_Width (ea)
ea ; A ; Ambiguous
ea ; F ; Fullwidth
ea ; H ; Halfwidth
ea ; N ; Neutral
ea ; Na ; Narrow
ea ; W ; Wide
的'W'
,'F'
和'A'
返回值应被视为在Windows全宽。
参考:http://www.unicode.org/reports/tr44/tr44-4.html#Validation_of_Enumerated
在POSIX平台上,引号字符(u'“'
和u'”'
)被认为是暧昧,这实际上在控制台1个字符宽度。在这里,您可以尝试第三方库urwid代替:
>>> from urwid.util import str_util
>>> str_util.get_width(ord(u'x'))
1
>>> str_util.get_width(ord(u'“'))
1
>>> str_util.get_width(ord(u'你'))
2
我也得到''Na''的状态,如果该字符不是亚洲。 –
@MarkRansom所有Unicode字符都有东亚宽度。 –
看来我的Python版本(2.7.5)与你的不同。我只是再次检查:>>> print unicodedata.east_asian_width(u'x') Na' –