Существует значительная проблема с некоторыми опубликованными ответами: 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 {}'строку простого формата.