Существует значительная проблема с некоторыми опубликованными ответами: unicode()
декодирование из кодировки по умолчанию, которая часто является ASCII; фактически unicode()
пытается понять смысл байтов, которые он дает, преобразовывая их в символы. Таким образом, следующий код, который по существу является тем, что рекомендуется предыдущими ответами, не работает на моей машине:
# -*- coding: utf-8 -*-
author = 'éric'
print '{0}'.format(unicode(author))
дает:
Traceback (most recent call last):
File "test.py", line 3, in <module>
print '{0}'.format(unicode(author))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
Ошибка происходит из-за того, что author
она не содержит только байты ASCII (то есть со значениями в [0; 127]), и unicode()
декодируется из ASCII по умолчанию (на многих машинах).
Надежное решение - явно указать кодировку, используемую в ваших полях; на примере UTF-8:
u'{0} in {1}'.format(unicode(self.author, 'utf-8'), unicode(self.publication, 'utf-8'))
(или без начального u
, в зависимости от того, хотите ли вы получить результат Unicode или байтовую строку).
На данный момент, можно было бы рассмотреть вопрос, имеющий author
и publication
поля являются строками Unicode, вместо того, чтобы декодировать их во время форматирования.
'{} in {}'
строку простого формата.