在Python中检查字符是全宽还是半宽

时间:2014-04-14 11:10:13

标签: python

我想使用Python

检查字符是全宽还是半宽
string="你好hallo"
for char in string:
    if( \uFF60- \u0f01  and \uFFE0-\uFFE6 ): print( char +"is fullwidth")
    elif(\uFF61-\uFFDC and \uFFE8-\uFFEE):print(char+ " is halfwidth")

请帮我把这个伪代码改成真正的python代码。

2 个答案:

答案 0 :(得分:7)

正如Alex Thornton所说,使用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(适用于Linux,OSX,Cygwin或其他类似Unix的操作系统):

>>> 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

答案 1 :(得分:5)

您可以使用unicodedata.east_asian_width(unichr)检查角色的宽度:

import unicodedata

for char in string:
    status = unicodedata.east_asian_width(char)
    if status == 'F':
         print('{0} is full-width.'.format(char))
    elif status == 'H':
        print('{0} is half-width.'.format(char))