簡體   English   中英

在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}對齊時:

  • 如果“name”包含4個JP字符,則會有2個前綴空格。
  • 如果“name”包含3個JP字符,則會有5個前綴空格。
  • 如果“name”包含2個JP字符,則會有8個前綴空格。
  • 如果“name”包含0個JP字符,則會有14個前綴空格。

在這種情況下,它似乎對待1個日本特征= 3個空格。

{name:<14s} {name:^14s} {name:>14s}都有上面提到的行為。

我使用的是OSX 10.10.2,終端字體是摩納哥。

也許這與全寬/半角字符有關。

有沒有像英文字符那樣對齊日文字符?

謝謝。


編輯:

Ignacio Vazquez-Abrams的回答確實是正確的方法。

  • 每個在Python中處理unicode的人都應該閱讀他指出的幻燈片

  • “\\ u3000”是CJK中的全寬空間。 看到這個頁面

  • 查看.Format語法也會有所幫助。

  • 我還想推薦這個SO答案 ,這有助於我理解unicode在Python中的工作原理。

但是,如果字符串包含半角和全角字符,則對齊仍然會出錯。 一個簡單的解決方法是使用所有全角字符。

在此輸入圖像描述

你同時進行了兩次goofup:

  1. 您使用的是UTF-8字節序列而不是字符序列。
  2. 你使用半寬空格對齊。

首先, 使用unicode而不是str 對於第二種,使用全寬度空格。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM