У меня проблемы с выравниванием японских символов в 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}
:
- Если "имя" содержит 4 JP символов, будет 2 префикса пространства.
- Если «имя» содержит 3 символа JP, будет 5 префиксных пространств.
- Если «имя» содержит 2 символа JP, должно быть 8 префиксных пространств.
- Если «имя» содержит 0 символов JP, будет 14 префиксных пространств.
Кажется, что в этом случае он обрабатывает 1 японский charater = 3 пробела.
{name:<14s}
{name:^14s}
{name:>14s}
все имеют упомянутое выше поведение.
Я использую OSX 10.10.2, терминальный шрифт - monaco.
Возможно, это имеет какое-то отношение к символам полной ширины/полуширины.
Есть ли все равно, чтобы выровнять японские символы так же, как английские символы?
Спасибо.
Edit:
Игнасио ответ Васкес-Абрамс является действительно правильным путем.
Каждый, кто имеет дело с Юникода в Python следует читать the slide он указал.
«\ u3000» - это пространство полной ширины в CJK. См. this page.
Отзыв .Format Syntax также поможет.
Я также хотел бы рекомендовать this SO answer, который поможет мне понять, как работает юникод в Python.
Однако, если строка содержит символы полуширины и полной ширины, выравнивание по-прежнему идет не так. Простым обходным путем является использование всех символов полной ширины.
Спасибо, это действительно правильный ответ. Я редактировал свой пост. Другой вопрос пришел ко мне. Вы знаете, как выровнять строки с символами полуширины и полной ширины? Теоретически, может показаться странным смешивать как половину, так и полный - с символом - это строка. Но на практике это совершенно нормально, поскольку мы почти никогда не используем полноразмерный английский и цифры. :) – user2875289
Вам нужно будет перебирать строку, подсчитывая, сколько из них есть, а затем введите соответствующий тип и количество пробелов. –
Я думал о том же, но задаюсь вопросом, есть ли лучший способ. Еще раз спасибо. – user2875289