Dlaczego poniższy element nie działa? i dlaczego to się udaje dzięki kodekowi „latin-1”?
o = "a test of \xe9 char" #I want this to remain a string as this is what I am receiving
v = o.decode("utf-8")
prowadzi do:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "C:\Python27\lib\encodings\utf_8.py",
line 16, in decode
return codecs.utf_8_decode(input, errors, True) UnicodeDecodeError:
'utf8' codec can't decode byte 0xe9 in position 10: invalid continuation byte
UnicodeEncodeError: 'ascii' codec can't encode characters in position 2-3: ordinal not in range(128)
.encode(latin-1)
Miałem ten sam błąd, gdy próbowałem otworzyć plik csv metodą pandas read_csv.
Rozwiązaniem była zmiana kodowania na „latin-1”:
źródło
Jest nieprawidłowy UTF-8. Ten znak jest e-ostrym znakiem w ISO-Latin1 i dlatego odnosi sukces z tym zestawem kodów.
Jeśli nie znasz zestawu kodów, w którym otrzymujesz ciągi, masz trochę problemów. Byłoby najlepiej, gdyby dla twojego protokołu / aplikacji wybrano jeden zestaw kodów (mam nadzieję, że UTF-8), a następnie odrzuciłbyś te, które nie zostały zdekodowane.
Jeśli nie możesz tego zrobić, potrzebujesz heurystyki.
źródło
Ponieważ UTF-8 jest wielobajtowy i nie ma znaku odpowiadającego kombinacji
\xe9
plus spacji.Dlaczego miałby odnosić sukcesy zarówno w UTF-8, jak i Latin-1?
Oto, jak powinno wyglądać to samo zdanie w utf-8:
źródło
Jeśli ten błąd pojawia się podczas manipulowania właśnie otwartym plikiem, sprawdź, czy otworzyłeś go w
'rb'
trybieźródło
soup = BeautifulSoup(open('webpage.html', 'rb'), 'html.parser')
To samo mi się przydarzyło, gdy czytałem z
.txt
pliku tekst zawierający hebrajski .Kliknąłem:
file -> save as
i zapisałem ten plik jakoUTF-8
kodowanieźródło
Błąd kodu utf-8 zwykle pojawia się, gdy zakres wartości liczbowych przekracza od 0 do 127.
powodem podniesienia tego wyjątku jest:
1) Jeśli punkt kodowy ma wartość <128, każdy bajt jest taki sam jak wartość punktu kodowego. 2) Jeśli punktem kodowym jest 128 lub więcej, łańcuch Unicode nie może być reprezentowany w tym kodowaniu. (W tym przypadku Python zgłasza wyjątek UnicodeEncodeError.)
Aby temu zaradzić, mamy zestaw kodowań, najczęściej stosowanym jest „Latin-1, znany również jako ISO-8859-1”
Tak więc punkty Unicode 0–255 ISO-8859-1 są identyczne z wartościami Latin-1, więc konwersja do tego kodowania wymaga po prostu konwersji punktów kodowych na wartości bajtowe; jeśli napotkamy punkt kodowy większy niż 255, ciąg nie może być zakodowany w Latin-1
gdy ten wyjątek występuje podczas próby załadowania zestawu danych, spróbuj użyć tego formatu
Dodaj technikę kodowania na końcu składni, która następnie akceptuje ładowanie zestawu danych.
źródło
Użyj tego, jeśli pokazuje błąd UTF-8
źródło
W tym przypadku próbowałem uruchomić plik .py, który aktywował ścieżkę / plik.sql.
Moim rozwiązaniem było zmodyfikowanie kodyfikacji pliku.sql na „UTF-8 bez BOM” i działa!
Możesz to zrobić za pomocą Notepad ++.
zostawię część mojego kodu.
/ Kod /
con = psycopg2.connect (host = sys.argv [1], port = sys.argv [2], dbname = sys.argv [3], user = sys.argv [4], password = sys.argv [5]) )
kursor = con.cursor () sqlfile = open (ścieżka, 'r')
źródło