C'è un problema significativo con alcune delle risposte pubblicate finora: unicode()decodifica dalla codifica predefinita, che spesso è ASCII; infatti, unicode()cerca di dare un "senso" ai byte che viene dato convertendoli in caratteri. Pertanto, il seguente codice, che è essenzialmente ciò che è raccomandato dalle risposte precedenti, non riesce sulla mia macchina:
# -*- coding: utf-8 -*-
author = 'éric'
print '{0}'.format(unicode(author))
dà:
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)
L'errore deriva dal fatto che authornon contiene solo byte ASCII (ovvero con valori in [0; 127]) e unicode()decodifica da ASCII per impostazione predefinita (su molte macchine).
Una soluzione affidabile è quella di fornire esplicitamente la codifica utilizzata nei campi; prendendo UTF-8 come esempio:
u'{0} in {1}'.format(unicode(self.author, 'utf-8'), unicode(self.publication, 'utf-8'))
(o senza l'iniziale u, a seconda che si desideri un risultato Unicode o una stringa di byte).
A questo punto, si potrebbe voler considerare di avere i campi authore publicationcome stringhe Unicode, invece di decodificarli durante la formattazione.
'{} in {}'stringa di formato normale .