Sto riscontrando un problema con Python string.format()
e il passaggio di stringhe Unicode. È simile a this older question, con la differenza che nel mio caso il codice di prova esplode sulla stampa, non sulla chiamata logging.info()
. Il passaggio dello stesso oggetto stringa Unicode a un gestore di registrazione funziona correttamente.Python's string.format() e Unicode
Ciò non funziona altrettanto bene con la precedente formattazione %
e string.format()
. Per accertarmi che fosse l'oggetto stringa il problema, e non stampare interagendo male con il mio terminale, ho provato ad assegnare la stringa formattata a una variabile prima della stampa.
def unicode_test():
byte_string = '\xc3\xb4'
unicode_string = unicode(byte_string, "utf-8")
print "unicode object type: {}".format(type(unicode_string))
output_string = "printed unicode object: {}".format(unicode_string)
print output_string
if __name__ == '__main__':
unicode_test()
L'oggetto stringa sembra presupporre che ottenga ASCII.
% python -V
Python 2.7.2
% python ./unicodetest.py
unicode object type: <type 'unicode'>
Traceback (most recent call last):
File "./unicodetest.py", line 10, in <module>
unicode_test()
File "./unicodetest.py", line 6, in unicode_test
output_string = "printed unicode object: {}".format(unicode_string)
UnicodeEncodeError: 'ascii' codec can't encode character u'\xf4' in position 0: ordinal not in range(128)
Cercando di lanciare output_string
come Unicode non fa alcuna differenza.
output_string = u "oggetto stampato unicode: {}". Formato (UNICODE_STRING)
mi manca qualcosa qui? La documentazione per l'oggetto stringa sembra abbastanza chiara che questo dovrebbe funzionare mentre sto tentando di usarlo.
L'utilizzo del codice come sopra, ma l'esecuzione di un 'oggetto Unicode stampato' con 'u' funziona per me (Python 2.6.5 e 2.7). L'errore che stai ricevendo quando lo fai è lo stesso sopra elencato? – RocketDonkey
Attendi ... stai codificando un flusso di byte unicode che dovrebbe rappresentare uno stream unicode già codificato? Quale personaggio deve stampare sopra per ''\ xc3 \ xb4'':' ô' o 'Ã''? –
Dovrebbe essere ô. L'esempio di codifica è stato copiato in modo abbastanza dettagliato dal post precedente di riferimento sul modulo di registrazione. – mpounsett