Bei einigen der bisher veröffentlichten Antworten gibt es ein erhebliches Problem: unicode()
Dekodiert von der Standardkodierung, bei der es sich häufig um ASCII handelt. Tatsächlich wird unicode()
versucht, die angegebenen Bytes "sinnvoll" zu machen, indem sie in Zeichen umgewandelt werden. Daher schlägt der folgende Code, der im Wesentlichen von früheren Antworten empfohlen wird, auf meinem Computer fehl:
# -*- coding: utf-8 -*-
author = 'éric'
print '{0}'.format(unicode(author))
gibt:
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)
Der Fehler ist darauf zurückzuführen, dass author
nicht nur ASCII-Bytes (dh Werte in [0; 127]) enthalten sind und unicode()
standardmäßig (auf vielen Computern) aus ASCII dekodiert werden.
Eine robuste Lösung besteht darin, die in Ihren Feldern verwendete Codierung explizit anzugeben. am Beispiel von UTF-8:
u'{0} in {1}'.format(unicode(self.author, 'utf-8'), unicode(self.publication, 'utf-8'))
(oder ohne Initiale u
, je nachdem, ob Sie ein Unicode-Ergebnis oder eine Byte-Zeichenfolge wünschen).
An diesem Punkt könnte man das in Betracht ziehen mit author
und publication
Felder werden , um Strings Unicode, anstatt sie Decodierung während der Formatierung.
'{} in {}'
Formatzeichenfolge verwenden.