programing

줄을 서야 한다." 결과 UnicodeDecodeError: 'utf-8' 코덱이 바이트를 디코딩할 수 없습니다.

bestcode 2023. 1. 15. 17:07
반응형

줄을 서야 한다." 결과 UnicodeDecodeError: 'utf-8' 코덱이 바이트를 디코딩할 수 없습니다.

여기 제 코드가 있습니다.

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

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

UnicodeDecodeError: 'utf-8' 코덱이 위치 2892에서 바이트 0xe9를 디코딩할 수 없습니다. 잘못된 연속 바이트입니다.

이 문제를 해결하고 open()에 파라미터를 추가하려고 했습니다.코드는 다음과 같습니다.

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

그러나 다시 같은 오류가 발생합니다.그럼 난 어쩌라는 거야?

마크 랜섬의 제안대로, 저는 그 문제에 대한 올바른 인코딩을 찾았습니다.인코딩은 이므로 치환합니다.open("u.item", encoding="utf-8")open('u.item', encoding = "ISO-8859-1")문제가 해결됩니다.

다음과 같은 것이 나에게도 통했다.ISO 8859-1은 음성인식 API를 주로 활용하면 많은 비용을 절감할 수 있다.

예:

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

파일에는 실제로 UTF-8 인코딩된 데이터가 포함되어 있지 않습니다.하다 에서 합니다.opendiscl.discl.discl을 클릭합니다.

예를 들어 Windows-1252 인코딩에서는0xe9그 캐릭터가 될 것이다.é.

판다를 사용하여 읽어보십시오.

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

이 방법은 다음과 같습니다.

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

또는 다음 중 하나를 선택합니다.

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

Python 2 를 사용하고 있는 경우는, 다음과 같은 솔루션이 됩니다.

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

냐하 because는encodingopen() , 라고 합니다.

TypeError: 'encoding'은 이 함수의 잘못된 키워드 인수입니다.

다음 방법으로 문제를 해결할 수 있습니다.

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

'binary'는 바이너리 모드로 파일을 읽는 것입니다.자세한 것은 이쪽.

다음과 같이 시험해 볼 수 있습니다.

open('u.item', encoding='utf8', errors='ignore')

Stackoverflow에 대한 다른 질문과 이 게시물의 이전 답변을 바탕으로 올바른 인코딩을 찾기 위한 도움말을 추가하고 싶습니다.

OS 하고 있는 는, Linux OS 로 을 취득할 수 .file★★★★★★★★★★★★★★★★★★:

file --mime-encoding <filename>

이를 위한 python 스크립트를 다음에 나타냅니다.

import sys
import subprocess

if len(sys.argv) < 2:
    print("Usage: {} <filename>".format(sys.argv[0]))
    sys.exit(1)

def find_encoding(fname):
    """Find the encoding of a file using file command
    """

    # find fullname of file command
    which_run = subprocess.run(['which', 'file'], stdout=subprocess.PIPE)
    if which_run.returncode != 0:
        print("Unable to find 'file' command ({})".format(which_run.returncode))
        return None

    file_cmd = which_run.stdout.decode().replace('\n', '')

    # run file command to get MIME encoding
    file_run = subprocess.run([file_cmd, '--mime-encoding', fname],
                               stdout=subprocess.PIPE,
                               stderr=subprocess.PIPE)
    if file_run.returncode != 0:
        print(file_run.stderr.decode(), file=sys.stderr)

    # return  encoding name only
    return file_run.stdout.decode().split()[1]

# test
print("Encoding of {}: {}".format(sys.argv[1], find_encoding(sys.argv[1])))

이 데이터 세트를 읽는 동안 Kaggle에서 다운로드한 데이터 세트를 사용하고 있었는데 다음과 같은 오류가 발생했습니다.

UnicodeDecodeError: 'utf-8' 코덱이 위치 183에서 바이트 0xf1을 디코딩할 수 없습니다. 계속 바이트가 잘못되었습니다.

그래서 이렇게 고쳤어요.

import pandas as pd

pd.read_csv('top50.csv', encoding='ISO-8859-1')

다음 예제에서는 Python 3에서 CSV 파일을 변환하는 방법을 보여 줍니다.

try:
    inputReader = csv.reader(open(argv[1], encoding='ISO-8859-1'), delimiter=',',quotechar='"')
except IOError:
    pass

사용할 때 가끔open(filepath) filepath실제로는, 같은 에러가 발생하는 파일이 아니기 때문에, 우선, 여는 파일이 존재하는 것을 확인해 주세요.

import os
assert os.path.isfile(filepath)

Notepad++로 파일을 열고 "Encoding" 또는 "Encodage" 메뉴를 선택하여 ANSI에서 UTF-8 또는 ISO 8859-1 코드 페이지를 식별하거나 변환합니다.

비슷한 질문(UTF-8 오류)에 대한 구글 요청을 웹페이지에서 더 빨리 검색할 수 있도록 다른 사용자를 위해 여기에 위안을 남겨둡니다.

이 설명으로 .csv 파일을 여는 데 문제가 있었습니다.

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

노트 패드로 파일을 열어 150번째 위치를 세어 보았습니다.그것은 키릴 기호입니다.인코딩 UTF-8을 사용하여 'Save as..' 명령어로 파일을 다시 저장했고 프로그램이 작동하기 시작했습니다.

이 에러가 계속 발생하며, 대부분의 경우 다음 방법으로 해결이 되지 않습니다.encoding='utf-8'하지만 사실은engine='python'다음과 같습니다.

import pandas as pd

file = "c:\\path\\to_my\\file.csv"
df = pd.read_csv(file, engine='python')
df

문서에 대한 링크는 다음과 같습니다.

https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.read_csv.html

인코딩이 encoding='로 대체되었습니다.ISO-8859-1'

opensubu.item' 행의 경우 encoding='ISO-8859-1':

인쇄(행)

github 또는 kaggle DF=pd.read_csv(file,encoding=')에서 직접 데이터를 로드하는 경우 사용합니다.ISO-8859-1')

UnicodeDecodeError: 'utf-8' 코덱이 위치 7044에 0x화된 바이트를 디코딩할 수 없습니다. 계속 바이트가 잘못되었습니다.

위의 오류는 인코딩으로 인해 발생합니다.

해결책:- "http='latin-1'" 사용

참고 자료: - https://pandas.pydata.org/docs/search.html?q=encoding

제 경우 Excel 파일(.xlsx)의 확장자를 직접 (.csv) 파일로 수정했기 때문에 이 문제가 발생하였습니다.

해결방법은 파일을 열고 새로운 (.csv) 파일로 저장하는 것입니다(즉, 파일 -> 다른 이름으로 저장 > 확장자(.csv)를 선택하여 저장하는 것입니다).이건 나한테 효과가 있었어.

언급URL : https://stackoverflow.com/questions/19699367/for-line-in-results-in-unicodedecodeerror-utf-8-codec-cant-decode-byte

반응형