본문 바로가기
Error(Exception)/ERROR-PYTHON

[python] UnicodeDecodeError

by 조조군 2024. 12. 13.
반응형

UnicodeDecodeError: 파이썬에서 발생하는 대표적인 오류 중 하나


1. 오류 설명

UnicodeDecodeError는 파이썬이 텍스트 파일을 열거나 데이터를 읽을 때, 주어진 바이트 데이터를 특정 인코딩으로 디코딩하려고 시도하지만 실패할 때 발생합니다. 주로 파일 인코딩 방식과 파이썬에서 지정한 인코딩 방식이 맞지 않을 때 발생합니다.

예를 들어, UTF-8로 인코딩된 파일을 ISO-8859-1로 읽으려 하면 디코딩 오류가 발생할 수 있습니다.


2. 오류 예시

다음은 UTF-8 파일을 잘못된 인코딩으로 읽으려고 할 때 발생하는 오류 예제입니다:

with open('example.txt', 'r', encoding='latin1') as file:
    data = file.read()

example.txt가 UTF-8로 인코딩된 파일이라면, 위 코드는 다음과 같은 오류를 출력할 수 있습니다:

UnicodeDecodeError: 'latin-1' codec can't decode byte 0xe2 in position 10: ordinal not in range(256)

3. 오류 해결책

  • 파일 인코딩 확인 및 명시적 설정: 파일의 인코딩을 확인하고, 올바른 인코딩을 사용합니다. 예를 들어, chardet 라이브러리를 사용해 파일의 인코딩을 감지할 수 있습니다.
  • errors 파라미터 사용: 디코딩 중 발생하는 오류를 무시하거나 대체하도록 설정할 수 있습니다.
    • errors='ignore': 오류를 무시하고 가능한 데이터를 읽습니다.
    • errors='replace': 오류가 발생한 부분을 대체 문자로 변경합니다.
  • 바이너리 모드 사용: 텍스트 모드 대신 바이너리 모드로 파일을 읽고, 필요한 부분만 직접 디코딩합니다.

4. 오류 예제 코드 및 해결 코드

오류 코드:

# 'example.txt'는 UTF-8로 인코딩된 파일이라고 가정
with open('example.txt', 'r', encoding='latin1') as file:
    data = file.read()  # 잘못된 인코딩으로 인해 UnicodeDecodeError 발생

해결 코드 1: 올바른 인코딩 명시

# UTF-8로 인코딩된 파일을 읽기
with open('example.txt', 'r', encoding='utf-8') as file:
    data = file.read()
    print(data)

해결 코드 2: 오류 무시

# 디코딩 중 발생하는 오류를 무시
with open('example.txt', 'r', encoding='latin1', errors='ignore') as file:
    data = file.read()
    print(data)

해결 코드 3: chardet로 파일 인코딩 자동 감지

import chardet

# 파일의 인코딩을 감지
with open('example.txt', 'rb') as file:
    raw_data = file.read()
    result = chardet.detect(raw_data)
    encoding = result['encoding']

# 감지된 인코딩으로 파일 읽기
with open('example.txt', 'r', encoding=encoding) as file:
    data = file.read()
    print(data)

해결 코드 4: 바이너리 모드로 파일 읽기 후 디코딩

# 바이너리 모드로 읽고 수동 디코딩
with open('example.txt', 'rb') as file:
    binary_data = file.read()

# 수동으로 디코딩 (예: UTF-8로 디코딩)
text_data = binary_data.decode('utf-8', errors='replace')
print(text_data)

위의 해결책 중 파일의 인코딩을 정확히 파악하고 사용하는 것이 가장 바람직한 방법입니다.

반응형

'Error(Exception) > ERROR-PYTHON' 카테고리의 다른 글

[python] UnicodeTranslateError  (1) 2024.12.13
[python] UnicodeEncodeError  (0) 2024.12.12
[python] UnicodeError  (1) 2024.12.11
[python] UnboundLocalError  (1) 2024.12.11
[python] TypeError  (0) 2024.12.10

댓글