2013-05-13 8 views
14

To jeden z moich własnych projektów. Pomoże to później innym graczom w grze, którą gram (AssaultCube).Podczas czytania pliku na Pythonie napotkałem błąd, który powiedział UnicodeDecodeError. Co mogę zrobić, aby rozwiązać ten błąd?

Jego celem jest rozbicie pliku dziennika i zwiększenie czytelności dla użytkowników.

Ciągle otrzymuję ten problem. Ktoś wie, jak to naprawić?

Obecnie nie planuję napisania/utworzenia pliku. Chcę tylko naprawić ten błąd.

Linia, która spowodowała błąd, jest faktyczną pustą linią. (On zatrzymał się na linii 66346)

To właśnie odpowiednia część mojego skryptu wygląda następująco:

log = open('/Users/Owner/Desktop/Exodus Logs/DIRTYLOGS/serverlog_20130430_00.15.21.txt', 'r') 
for line in log: 

i wyjątek jest:

Traceback (most recent call last): 
    File "C:\Users\Owner\Desktop\Exodus Logs\Log File Translater.py", line 159, in <module> 
    main() 
File "C:\Users\Owner\Desktop\Exodus Logs\Log File Translater.py", line 7, in main 
    for line in log: 
    File "C:\Python32\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 0x81 in position 3074: character maps to <undefined> 
+0

Co kodowanie jest plik w? –

+0

To dziwne, Wydaje się, że to się zdarzyło tylko wtedy, gdy użyłem określonego pliku. Zatrzymał się również na linii spefiicznej. – Bugboy1028

+0

@martijnPieters, Gdzie mogę znaleźć kodowanie w pliku? – Bugboy1028

Odpowiedz

20

Spróbuj:

enc='utf-8' 
log = open('/Users/Owner/Desktop/Exodus Logs/DIRTYLOGS/serverlog_20130430_00.15.21.txt', 'r', encoding=enc) 

jeśli to nie zadziała, spróbuj:

enc='utf-16' 
log = open('/Users/Owner/Desktop/Exodus Logs/DIRTYLOGS/serverlog_20130430_00.15.21.txt', 'r', encoding=enc) 

można też spróbować z

enc='iso-8859-15' 

też spróbować:

enc = 'cp437' 

wich jest tak stary, ale ma „u” na 0x81 wich będzie pasował do napisu „usser” wich Znalazłem na stronie głównej kostki napaści.

jeśli wszystkie kodowania mają racji spróbuj skontaktować niektórych facetów rozwijających Assaultcube lub jak wspomniano w komentarzu: przyjrzeć się https://pypi.python.org/pypi/chardet

+2

Parametr kodowania nie jest dostępne na Pythonie 2 – antonagestam

+0

Rigth. W przypadku Python 2.x zobacz http://stackoverflow.com/questions/10971033/backporting-python-3-openencoding-utf-8-to-python-2 –

Powiązane problemy