Есть ли разница между `%` -форматным оператором и `str.format ()` в python относительно кодировки unicode и utf-8? - PullRequest
7 голосов
/ 22 декабря 2011

Предположим, что

n = u"Tübingen"
repr(n) # `T\xfcbingen` # Unicode
i = 1 # integer

Первый из следующих файлов выдает

UnicodeEncodeError: 'ascii' codec can't encode character u'\xfc' in position 82: ordinal not in range(128)

Когда я делаю n.encode('utf8'), он работает.

Второй работает безупречно воба случая.

# Python File 1
#
#!/usr/bin/env python -B
# encoding: utf-8

print '{id}, {name}'.format(id=i, name=n)

# Python File 2
#
#!/usr/bin/env python -B
# encoding: utf-8

print '%i, %s'% (i, n)

Поскольку в документации рекомендуется использовать format() вместо оператора формата %, я не понимаю, почему format() выглядит более"handicaped".format() работает только с utf8 -струнами?

1 Ответ

10 голосов
/ 22 декабря 2011

Вы используете string.format, пока у вас нет строки, но объект unicode.

print u'{id}, {name}'.format(id=i, name=n)

будет работать, поскольку вместо него используется unicode.format.

...