Sto cercando di usare python per trovare il carattere "þ" della spina e sostituire con la pipe "|". Ad esempio, il file ha contenuti come 125650þ383736þ392647. Di seguito è riportato il mio codice:
f = codecs.open(path, encoding="utf-8", mode="r+")
contents = f.read()
if u"u00FE" in contents:
print "Found thorn"
Ho avuto un errore nella riga contents = f.read (): UnicodeDecodeError: il codec "utf8" non può decodificare il byte 0xfe nella posizione 7: byte di avvio non valido
Sembra che l'oggetto file f non possa decodificare il carattere della spina. Qual è il problema qui? Grazie in anticipo
risposte:
3 per risposta № 1La causa più comune di errori di decodifica è quellastai usando la codifica sbagliata. In questo caso, sembra che il tuo file sia codificato in Windows-1252 o latin-1, non utf-8. Sono abbastanza sicuro che sia così perché 0xfe
è il punto di codice per la spina lettera piccola latina per quei codec.
Per esempio:
>>> print "125650xfe383736xfe3926".decode("latin-1")
125650þ383736þ3926
0 per risposta № 2
Il tuo file non contiene codifiche UTF8 valide, né è tuo u"u00FE"
la corretta codifica UTF8 di þ
:
>>> u"þ".encode("utf8")
"xc3xbe"
Sembra che la codifica che ti aspetti sia latin-1:
>>> u"þ".encode("latin-1")
"xfe"
Quindi tu vuoi:
f = codecs.open(path, encoding="latin-1", mode="r+")
contents = f.read()
if u"þ" in contents:
print "Found thorn"