проблема с использованием str.center () с символами Юникода - PullRequest
3 голосов
/ 14 июля 2011

Я наблюдал это странное поведение center метода str объектов в python 2.7 -

>>> print '-'.center(5,'.')        # '-' is the minus or hyphen key on the keyboard.
..-..                              # correctly centered
>>> print '─'.center(5, '.')       # '─' is NOT the minus or hyphen key on the keyboard.
.─.                                # incorrectly centered

Это ошибка в реализации метода center или имеет какое-то отношение к использованию символов Юникода?
Как это исправить?

[Обратите внимание, что это прекрасно работает в python 3.2]

Ответы [ 2 ]

3 голосов
/ 14 июля 2011

В Python 2 существует различие между типами str и unicode.str - это последовательность байтов, созданная с неизмененными кавычками.Ваш '─' создает последовательность из 3 байтов, которые отображаются как один символ Юникода;когда вы просите str.center() центрировать эти байты в поле шириной 5 байт, он добавляет один байт с каждой стороны;при печати вы получаете только 3 символа.

Если вы создаете объект unicodeu'─' или '─'.decode (' utf-8 ')), у вас теперь есть последовательность из 1 юникодасимвол, который будет центрирован путем добавления 2 символов с каждой стороны.

В Python 3 нет этой проблемы, потому что обычные строки представляют собой последовательности символов Юникода.

2 голосов
/ 14 июля 2011
print '─'.decode('utf-8').center(5, '.')  

# returns: '..─..'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...