对齐 python 中的日语字符

Aligning Japanese characters in python

我在 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 spaces。

{name:<14s} {name:^14s} {name:>14s} 都有上述行为。

我正在使用 OSX 10.10.2,终端字体是 monaco。

可能这与 full-width/half-width 个字符有关。

有没有像英文字符一样对齐日文字符的方法?

谢谢。


编辑:

Ignacio Vazquez-Abrams 的回答确实是正确的方法。

但是,如果字符串同时包含半角字符和全角字符,对齐仍然会出错。一个简单的解决方法是使用所有全角字符。

您同时犯了两个错误:

  1. 您使用的是 UTF-8 字节序列而不是字符序列。
  2. 您正在使用半角空格对齐。

对于第一个,use unicodes instead of strs。对于第二个,请改用全角空格。

>>> print '{:>8s}'.format('ありがとう')
ありがとう
>>> print u'{:>8s}'.format(u'ありがとう')
   ありがとう
>>> print u'{:\u3000>8s}'.format(u'ありがとう')
   ありがとう