/ / Używaj Pythona do wyszukiwania i zastępowania znaku cierni (þ) za pomocą potoku (|) - python

Użyj Pythona, aby wyszukać i zamienić znak ciernisty (þ) za pomocą potoku (|) - python

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 № 1

Najczę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"