Próbuję użyć Pythona, aby znaleźć znak "þ" i zastąpić go potokiem "|". Na przykład plik ma zawartość, na przykład 125650þ383736þ392647. Poniżej znajduje się mój kod:
f = codecs.open(path, encoding="utf-8", mode="r+")
contents = f.read()
if u"u00FE" in contents:
print "Found thorn"
Mam błąd w linii treść = f.read (): UnicodeDecodeError: kodek "utf8" nie może odszyfrować bajtu 0xfe w pozycji 7: niepoprawny bajt początkowy
Wygląda na to, że obiekt pliku f nie może dekodować cierniowej postaci. Jaki jest tutaj problem? Z góry dziękuję
Odpowiedzi:
3 dla odpowiedzi № 1Najczęstszą przyczyną błędów dekodowania jest toużywasz niewłaściwego kodowania. W tym przypadku wygląda na to, że Twój plik jest zakodowany w Windows-1252 lub latin-1, a nie utf-8. Jestem prawie pewien, że tak jest, ponieważ 0xfe
jest punktem kodowym dla cierni małych liter łacińskich dla tych kodeków.
Na przykład:
>>> print "125650xfe383736xfe3926".decode("latin-1")
125650þ383736þ3926
0 dla odpowiedzi nr 2
Twój plik nie zawiera poprawnych kodowań UTF8, ani Twojego u"u00FE"
poprawne kodowanie UTF8 þ
:
>>> u"þ".encode("utf8")
"xc3xbe"
Wygląda na to, że kodowanie, którego oczekujesz, to łacińska 1:
>>> u"þ".encode("latin-1")
"xfe"
Więc chcesz:
f = codecs.open(path, encoding="latin-1", mode="r+")
contents = f.read()
if u"þ" in contents:
print "Found thorn"