Неправильное форматирование строки при использовании закодированных строк Юникода - PullRequest
2 голосов
/ 21 марта 2012

Я имею дело с некоторыми строками юникода, которые я кодирую с использованием utf-8 всякий раз, когда мне нужно их отобразить.Таким образом я проверяю, что даже при перенаправлении вывода моего скрипта в файл используется правильная кодировка (я знаю, что есть другие способы сделать это, но это не главное).

ТеперьИногда мне нужно табулировать некоторые данные, и для этого я использую спецификаторы формата, как показано ниже:

def tabulate(uni1, uni2):
    print "%-15s,%-15s" % (uni1.encode('utf-8'), uni2.encode('utf-8'))

print '01234567890123456789' # ruler
tabulate(u'HELLO', u'BYE')
tabulate(u'ñññññ', u'BYE')

Эта программа выдаст следующий вывод

01234567890123456789
HELLO          ,BYE            
ñññññ     ,BYE

Как вы можете видетьвторая строка неправильно табулирована.Я предполагаю, что %s не знает о кодировке строки и плохо вычисляет ее длину.

Есть ли решение этой проблемы?

Ответы [ 2 ]

1 голос
/ 21 марта 2012

Вот реализация, на которую указал Игнасио, которая должна выполнять форматирование перед кодированием:

def tabulate(uni1, uni2):
    print (u"%-15s,%-15s" % (uni1, uni2)).encode('utf-8')

>>> tabulate(u'HELLO', u'BYE')
HELLO          ,BYE            
>>> tabulate(u'ñññññ', u'BYE')
ñññññ          ,BYE    
1 голос
/ 21 марта 2012

Форматировать как Юникод, , затем Кодировать.

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