2017-02-03 1 views
-1

파이썬 스크립트에서 하나의 로그 파일을 읽으려고합니다. 내가 파일을UnicodeDecodeError : 'charmap'코덱이 XXX 위치의 바이트 0x8f를 디코딩 할 수 없습니다. char

with open(log_file, 'r') as log_file_fh: 
    for line in log_file_fh: 
     print(line) 

을 읽을 사용하고 코드가 내 프로그램은 리눅스에서 잘 작동하지만 난 다음 다음과 같은 오류

File "C:\Python\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 0x8f in position 311: char 
acter maps to <undefined> 

무엇입니까 특정 줄 번호의 일부 라인을 읽기 windows.After에 오류가 있어요 ascii, utf8, utf-8, ISO-8859-1, cp1252, cp850과 같은 다른 인코딩 모드를 사용하여 문제를 해결하려고했습니다. 하지만 여전히 같은 문제에 직면 해 있습니다. 이 문제를 해결할 방법이 있습니까?

+0

파일의 인코딩은 무엇입니까? – RemcoGerlich

+0

파일의 인코딩을 모릅니다. 하지만 난 그 ANSI 내가 파일의 인코딩을 찾을 수있는 한 방법을 보았다 메모장에서 파일을 열고 거기에 내가 ANSI보고로 저장을 사용하는 것으로 생각합니다. –

+0

나는 follwing 링크를 사용하여 서양의 인코딩 인코딩을 확인했습니다. http://codeftw.blogspot.in/2009/07/how-to-find-character-encoding-of-text.html –

답변

0

내가 파이썬 스크립트를 통해 읽고 싶은 로그 파일은 인코딩 서양 언어로. 내가 링크 https://docs.python.org/2.4/lib/standard-encodings.html 내가 인코딩 모드로 'CP850'을 사용하고이 나를

with open(log_file, 'r',encoding='cp850') as log_file_fh: 
    for line in log_file_fh: 
     print(line) 

위해 일하지만 코덱의 서유럽의 많은에 대한 해당 사이트에서 사용할 수있는 다음의 주심을했다. 나는 개발자의 대부분이 'CP850'모드

오류를 인코딩하면 파일을 여는 동안 오류 인수를 추가하고 속성으로 '무시'줄입니다 처리하는 가장 좋은 방법을 사용하지 제안하기 때문에이 올바른 해결책이 아니다라고 생각합니다. 우리가 디코딩 할 수없는 특수 문자는 무시할 것입니다. 필자가 파일의 전체 내용을 읽지 않기 때문에이 옵션은 괜찮습니다. 특정 로그가 필요합니다.

with open(log_file, 'r',errors='ignore') as log_file_fh: 
    for line in log_file_fh: 
     print(line) 
+1

글쎄, 파일이''cp850 ''으로 올바르게 디코딩되면 인코딩으로''cp850''을 지정해야합니다. 그러나 로그 파일을 만드는 코드를 수정하여 고대의''cp850 ''대신''UTF-8 ''로 인코딩되도록하는 것이 훨씬 더 낫습니다. 도움이 필요하시면 **이 질문을 수정하지 마십시오 **. 대신 로그 파일 작성 방법을 보여주는 [mcve]를 사용하여 새로운 질문을 만들어야합니다. –

+0

내 파이썬 스크립트는 리눅스와 윈도우즈 10에서 잘 작동하지만 윈도우 7에서는 'cp850'에 의해 해결 된 charmap 오류가 발생합니다.이 점에 대해 사과드립니다 http://stackoverflow.com/questions/9233027/unicodedecodeerror-charmap-codec-cant-decode -byte-x-in-position-y-character. 나는 'latin_1'을 사용하여 나를 위해 일했습니다. –

+0

Windows 시스템에 다른 기본 charmaps가 설정되어있는 것처럼 들립니다. 하지만 실제로는 파이썬 코딩 문제가 아니라 Windows 구성 문제입니다. cp850과 cp1252는 모두 Latin1 (일명 ISO-8859-1)과 관련이 있지만 해당 코드 페이지의 문자 중 일부는 Latin1과 다릅니다. 자세한 내용은 Wikipedia 기사를 참조하십시오. 이러한 유사점 때문에 Latin1로 cp850 파일을 디코딩하려고하면 대부분의 경우 작동하는 것처럼 보일 수 있지만 일부 특수 문자는 잘못되었을 수 있습니다. –

0

편집 : 제안 바이너리 모드로 파일을 열 : with open(log_file, 'rb')

다음 코드를 디코딩에 UTF-8 :

with open(log_file, 'r') as log_file_fh: 
    for line in log_file_fh: 
     line = line.decode('utf-8') 
     print(line) 
+0

이 해결책을 시도해 보았습니다. –

+0

@raginidahihande이 해결책은'log_file'이'utf-8' 인코딩을 사용한다고 가정하지만 올바르게 작동하려면 바이너리 모드에서 파일을 열지 않으면 안됩니다 :'with 오픈 (log_file, 'rb')'. 그리고 물론 그렇게하더라도 'log_file'이 'utf-8'로 인코딩되지 않으면 제대로 동작하지 않을 것입니다. –

+0

@ PM2Ring 당신은 새로운 대답을 할 수 있습니다. 그럼 내가 삭제합니다. –

관련 문제