2016-08-17 2 views
4

현재 매우 큰 .txt 파일 (몇 만 줄의 텍스트)에서 간단한 정규 표현식을 사용하려고합니다. 문제를 일으키는 가장 간단한 코드 :Python3의 UnicodeDecodeError

file = open("exampleFileName", "r") 
    for line in file: 
     pass 

오류 메시지 :

Traceback (most recent call last): 
    File "example.py", line 34, in <module> 
    example() 
    File "example.py", line 16, in example 
    for line in file: 
    File "/usr/lib/python3.4/codecs.py", line 319, in decode 
    (result, consumed) = self._buffer_decode(data, self.errors, final) 
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xed in position 7332: invalid continuation byte 

가 어떻게이 문제를 해결할 수 있습니까? UTF-8이 잘못된 인코딩입니까? 그리고 그것이 맞다면 어느 것이 옳은지 어떻게 알 수 있습니까?

감사합니다.

+0

아마도 http://stackoverflow.com/questions/5552555/unicodedecodeerror-invalid-continuation-byte와 관련이 있습니다 – Jeff

+0

'file -bi [your_filename]'의 출력을 게시하십시오. 인코딩을 받게됩니다. 그런 다음'open()'에'encoding' 인수를 제공하십시오. – light2yellow

+0

-bi 명령은 무엇을합니까? –

답변

5

UTF-8이 유효하지 않으므로 latin-1 인코딩으로 읽어야합니다. 시도하십시오

file = open('exampleFileName', 'r', encoding='latin-1') 
+0

명령 줄에서 읽을 때도 동일한 방법을 알고 있습니까? 'input()'함수를 사용합니다. 인코딩을 구성하는 방법이 있습니까? 아니면 다른 구성 가능한 함수가 있습니까? – chivorotkiv

+0

latin-1 인코딩을 사용하는 방법을 어떻게 알았습니까? –

+0

0xed는 라틴어 -1 인코딩에서 찾을 수있는 'í'문자입니다. – mic4ael

0

즉석에서 인코딩을 식별 할 수 없습니다. 그래서 어느 사용자 나 주석으로 작성하거나 (다른 답변에 의해 제안 된)과 유사한 구조를 사용하지만,이 야생 샷을하는 방법 : 당신이 Standard Python Encodings에서 모든 인코딩을 테스트 할 때까지, 등등

try: 
    file = open("exampleFileName", "r") 
except UnicodeDecodeError: 
    try: 
     file = open("exampleFileName", "r", encoding="latin2") 
    except: #... 

그리고 .

그래서이 내포 된 지옥으로 귀찮게 할 필요가 없다고 생각합니다. 단지 file -bi [filename] 번만 인코딩을 복사하고 잊어 버리십시오.

UPD. 사실, 에 있다면 another stackoverflow answer을 사용할 수 있습니다.