2012-02-10 12 views
192

Próbuję uzyskać program w języku Python 3, aby wykonać pewne manipulacje z plikiem tekstowym wypełnionym informacjami. Jednak podczas próby odczytu pliku pojawia się następujący błąd:UnicodeDecodeError: Kodek 'charmap' nie może dekodować bajtu X na pozycji Y: mapa znaków do <undefined>

Traceback (most recent call last): 
File "SCRIPT LOCATION", line NUMBER, in <module> 
text = file.read() 
File "C:\Python31\lib\encodings\cp1252.py", line 23, in decode 
return codecs.charmap_decode(input,self.errors,decoding_table)[0] 
UnicodeDecodeError: 'charmap' codec can't decode byte 0x90 in position 2907500: character maps to <undefined> 

Jeśli ktoś mógłby mi dać żadnej pomocy, aby spróbować ominąć ten problem byłbym bardzo wdzięczny.

Dzięki!

+0

z tego samego błędu to rozwiązanie pomogło mi, [rozwiązanie błędu charmap] (https://stackoverflow.com/questions/12468179/unicodedecodeerror-utf8-codec-cant-decode-byte-0x9c) –

Odpowiedz

326

Ten plik nie używa kodowania CP1252. Używa innego kodowania. Który z nich musisz sam wymyślić. Najczęściej są to: Latin-1 i UTF-8. Od 0x90 w rzeczywistości nie oznacza nic w Latin-1, UTF-8 (gdzie 0x90 jest bajt kontynuacji) jest bardziej prawdopodobne.

określić kodowanie po otwarciu pliku:

file = open(filename, encoding="utf8") 
+8

Fajnie, miałem ten problem z jakimś kodem Pythona 2.7, który próbowałem uruchomić w Pythonie 3.4. Łacina-1 działała dla mnie! – 1vand1ng0

+3

Dzięki @ 1vand1ng0 utf-8 nie działa dla mnie, ale Latin-1 zrobił – Lucas

+2

jeśli używasz Pythona 2.7 i robisz ten sam błąd, spróbuj modułu 'io':' io.open (filename, encoding = "utf8 ")' – christopherlovell

15

Jako rozszerzenie do @LennartRegebro odpowiedź:

Jeśli nie można powiedzieć, co to jest i kodowania rozwiązanie powyżej nie działa (to nie jest utf8) i odkryłeś, że po prostu zgadujesz - są online tools, których możesz użyć do zidentyfikowania tego, co to jest kodowanie. Nie są idealne, ale zwykle działają dobrze. Po wykryciu kodowania powinieneś być w stanie użyć rozwiązania powyżej.

EDIT: (Skopiowane z komentarzem)

Dość popularny edytor tekstu Sublime Text ma polecenie, aby wyświetlić kodowanie jeśli został ustawiony ...

  1. Go do View ->Show Console (lub Ctrl + `)

enter image description here

  1. wpisać w polu na dole view.encoding() i nadziei dla najlepszych (I był w stanie uzyskać niczego poza Undefined ale być może będziesz miał więcej szczęścia ...)

enter image description here

+0

Niektóre edytory tekstu również dostarczą te informacje. Wiem, że z vimem możesz to uzyskać poprzez ': set fileencoding' ([z tego linku] (http://superuser.com/questions/28779/how-do-i-find-tode-encoding--- current-buffer-in-vim)) – PaxRomana99

+2

Sublime Text, również - otwórz konsolę i wpisz 'view.encoding()'. – JimmidyJoo