2012-04-11 2 views
1

주파수에 대한 일련의 암호를 분석하려고합니다. 내 스크립트는 다른 입력 미디어와 함께 작동하지만 현재 데이터 세트에 잘못된 문자가있는 것 같습니다. "불량"데이터를 어떻게 해결할 수 있습니까?문자열 처리 오류 : UnicodeDecodeError : 'utf8'코덱을 디코딩 할 수 없습니다.

import re 
import collections 
words = re.findall('\w+', open('rockyou.txt').read().lower()) 
a=collections.Counter(words).most_common(50) 
for word in a: 
    print(word) 
내가 다음 오류 얻을

:

Traceback (most recent call last): 
    File "shakecount.py", line 3, in <module> 
    words = re.findall('\w+', open('rockyou.txt').read().lower().ASCII) 
    File "/Library/Frameworks/Python.framework/Versions/3.2/lib/python3.2/codecs.py", line 300, in decode 
    (result, consumed) = self._buffer_decode(data, self.errors, final) 
UnicodeDecodeError: 'utf8' codec can't decode byte 0xf1 in position 5079963: invalid continuation byte 

어떤 아이디어?

답변

5

코드가 사용자의 오류와 정확히 일치하지 않습니다 (디버깅을 시도한 것으로 가정). 그러나 텍스트 파일은 UTF-8이 아닙니다.

수동으로 내 추측이 latin-1 인으로, 인코딩을 지정해야합니다

words = re.findall('\w+', open('rockyou.txt', encoding='latin-1').read().lower()) 

당신이 오류에도 불구하고 계속하려면

, 당신은 openerrors='ignore' 또는 errors='replace'를 전달할 수 있습니다.

+0

위의 내용은 도움이되었지만 궁극적으로이 문제를 해결하지는 못했지만 그리스 오류가 더 많이 발생했습니다 (프로그래밍을 처음 사용하는 경우). 텍스트 편집기에서 단어 목록을 열어서 utf-8 형식으로 다시 저장 한 다음 작동했습니다. 도와 주셔서 감사합니다! – AlphaTested

+0

@AlphaTested 인코딩을 모르는 경우에는 [chardet] (http://pypi.python.org/pypi/chardet)을 사용하여 인코딩을 검색하는 방법이 있습니다. – agf

+0

아, 알겠습니다. 감사. – AlphaTested

관련 문제