본문 바로가기
카테고리 없음

Python UnicodeDecodeError 인코딩 문제 해결법

by smartmove 2025. 5. 27.

Python UnicodeDecodeError란?

Python에서 `UnicodeDecodeError`는 바이트 데이터를 문자열로 변환할 때(디코딩) 인코딩 방식이 맞지 않아 발생하는 오류입니다. 주로 파일 읽기, 네트워크 데이터 처리 시 인코딩이 잘못 지정되거나, 데이터가 손상된 경우에 나타납니다. 이 오류를 해결하지 않으면 텍스트 처리 과정에서 프로그램이 중단될 수 있어 반드시 적절한 대처가 필요합니다.

1. UnicodeDecodeError 발생 주요 원인

  • 파일이나 데이터의 실제 인코딩과 디코딩 시 지정한 인코딩이 다를 때
  • 파일에 UTF-8이 아닌 다른 인코딩(예: CP949, ISO-8859-1)이 사용된 경우
  • 손상된 또는 비표준 인코딩 데이터 포함
  • 디코딩 과정에서 잘못된 바이트 시퀀스가 있을 때

2. UnicodeDecodeError 예시 코드


# UTF-8이 아닌 인코딩 파일을 UTF-8로 읽으려 할 때 오류 발생
with open('example.txt', 'r', encoding='utf-8') as f:
    content = f.read()

3. UnicodeDecodeError 해결 방법

3-1. 올바른 인코딩 확인 및 지정

파일이나 데이터의 인코딩 방식을 정확히 확인한 뒤, 그 인코딩을 명시해서 읽어야 합니다. 윈도우에서 생성된 파일은 주로 CP949 또는 EUC-KR일 수 있습니다.

with open('example.txt', 'r', encoding='cp949') as f:
    content = f.read()

3-2. 인코딩 자동 감지 라이브러리 사용

`chardet` 또는 `charset-normalizer` 라이브러리를 활용해 인코딩을 자동으로 감지한 후 처리할 수 있습니다.

import chardet

with open('example.txt', 'rb') as f:
    raw_data = f.read()

result = chardet.detect(raw_data)
encoding = result['encoding']

with open('example.txt', 'r', encoding=encoding) as f:
    content = f.read()

3-3. 오류 무시 또는 대체 처리

디코딩 과정에서 오류가 발생해도 무시하거나 특정 문자로 대체할 수 있습니다. 다만, 데이터 손실이 발생할 수 있으므로 신중히 사용하세요.

with open('example.txt', 'r', encoding='utf-8', errors='ignore') as f:
    content = f.read()

# 또는
with open('example.txt', 'r', encoding='utf-8', errors='replace') as f:
    content = f.read()

3-4. 바이너리 모드로 읽기 후 직접 디코딩

바이트 단위로 파일을 읽고, 문제가 되는 부분을 직접 처리하는 방법도 있습니다.

4. 요약 및 결론

  • 파일의 실제 인코딩을 정확히 파악하는 것이 가장 중요하다.
  • 인코딩 자동 감지 라이브러리를 활용해 효율적인 처리가 가능하다.
  • 오류 무시(`ignore`)나 대체(`replace`) 옵션은 임시방편으로만 사용하자.
  • 데이터가 손상되지 않도록 인코딩 문제를 근본적으로 해결하는 것이 최선이다.
이 가이드를 따르면 Python에서 발생하는 UnicodeDecodeError를 효과적으로 해결하여 안정적인 텍스트 처리가 가능합니다.