[python] “for line in…”은 UnicodeDecodeError를 발생시킵니다 : ‘utf-8’코덱이 바이트를 디코딩 할 수 없습니다

여기 내 코드가 있습니다.

for line in open('u.item'):
#read each line

이 코드를 실행할 때마다 다음 오류가 발생합니다.

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 2892: invalid continuation byte

이 문제를 해결하고 open ()에 추가 매개 변수를 추가하려고했습니다. 코드는 다음과 같습니다.

for line in open('u.item', encoding='utf-8'):
#read each line

그러나 다시 같은 오류가 발생합니다. 그럼 어떻게해야합니까! 도와주세요.



답변

Mark Ransom이 제안한 것처럼 해당 문제에 적합한 인코딩을 찾았습니다. 인코딩 정도로 교체 “ISO-8859″을 open("u.item", encoding="utf-8")가진 open('u.item', encoding = "ISO-8859-1")문제점을 해결하는 것이다.


답변

ISO 8859-1은 주로 Speech Recognition API를 사용하는 경우 많은 것을 절약 할 것입니다.

예:

file = open('../Resources/' + filename, 'r', encoding="ISO-8859-1");


답변

파일에 실제로 utf-8로 인코딩 된 데이터가없고 다른 인코딩이 포함되어 있습니다. 해당 인코딩이 무엇인지 파악하고 open통화에 사용하십시오 .

예를 들어 Windows-1252 인코딩 0xe9에서는 문자가 é됩니다.


답변

팬더를 사용하여 읽으십시오.

pd.read_csv('u.item', sep='|', names=m_cols , encoding='latin-1')


답변

Python 2다음을 사용 하는 경우 해결책이 있습니다.

import io
for line in io.open("u.item", encoding="ISO-8859-1"):
    # do something

encoding매개 변수가 작동하지 않기 때문에open() 다음 오류가 발생합니다.

TypeError : 'encoding'은이 함수에 유효하지 않은 키워드 인수입니다.


답변

다음과 같은 문제를 해결할 수 있습니다.

for line in open(your_file_path, 'rb'):

‘rb’는 이진 모드에서 파일을 읽고 있습니다. 자세한 내용은 여기를 참조 하십시오 . 이것이 도움이되기를 바랍니다!


답변

이것은 작동합니다 :

open('filename', encoding='latin-1')

또는:

open('filename',encoding="IS0-8859-1")