Si sta codificando su UTF-8, quindi su -encoding su UTF-8. Python può fare solo se prima decodifica di nuovo in Unicode, ma deve utilizzare il codec predefinito ASCII:
>>> u'ñ'
u'\xf1'
>>> u'ñ'.encode('utf8')
'\xc3\xb1'
>>> u'ñ'.encode('utf8').encode('utf8')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)
Non tenere la codifica; lasciare la codifica UTF-8 all'ultimo momento possibile. Concatena invece i valori Unicode.
È possibile utilizzare str.join()
(o, meglio, unicode.join()
) qui per concatenare i tre valori con trattini tra:
nombre = u'-'.join(fabrica, sector, unidad)
return nombre.encode('utf-8')
ma anche la codifica qui potrebbe essere troppo presto.
Regola del pollice: decodificare nel momento in cui si riceve il valore (se non sono già forniti da un'API i valori Unicode), codificare solo quando è necessario (se l'API di destinazione non gestisce direttamente i valori Unicode).
fonte
2014-06-29 10:56:06
Possibile duplicato di [Python - 'ascii' codec non può decodificare byte] (http://stackoverflow.com/questions/ 9644099/python-ascii-codec-cant-decode-byte) – bummi