我难以在python中对齐日文字符。
代码:
print "{c1}{name:>14s}{c2}{nick_name:>14s}{planes:>16s}".format(
name=name, nick_name=nick_name, planes=planes,
c1=u.color['yellow'], c2=u.color['default']
)
结果:
如果字符串只包含英文和数字,则.format()工作正常,如右图所示。
遇到日文字符时对齐出错,如左图所示。
有趣的是,在与{name:>14s}
对齐时:
在这种情况下,它似乎可以处理1个日本字符= 3个空格。
{name:<14s}
{name:^14s}
{name:>14s}
都有上述行为。
我使用的是OSX 10.10.2,终端字体是monaco。
这可能与全角/半角字符有关。
有没有像英文字符那样对齐日文字符?
谢谢你。
编辑:
Ignacio Vazquez-Abrams的答案确实是正确的方法。
每个在Python中处理unicode的人都应该阅读他指出的the slide。
“\ u3000”是CJK中的全角空格。请参阅this page。
查看.Format Syntax也会有所帮助。
我还想推荐this SO answer,这有助于我了解unicode在Python中的工作原理。
但是,如果字符串包含半角和全角字符,则对齐仍然会出错。一个简单的解决方法是使用所有全角字符。
答案 0 :(得分:4)
你同时进行两次游戏:
首先,use unicode
s instead of str
s。对于第二种,请使用全宽空格。
>>> print '{:>8s}'.format('ありがとう')
ありがとう
>>> print u'{:>8s}'.format(u'ありがとう')
ありがとう
>>> print u'{:\u3000>8s}'.format(u'ありがとう')
ありがとう