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

Python UnicodeDecodeError: 문자 인코딩 문제 해결법

by luckyvibe 2025. 5. 29.

Python UnicodeDecodeError란?

`UnicodeDecodeError`는 Python이 텍스트 파일이나 바이트 데이터를 특정 인코딩 방식으로 디코딩할 수 없을 때 발생하는 예외입니다. 주로 파일을 읽을 때 기본 인코딩(`utf-8`)이 실제 인코딩과 다를 경우 발생하며, 크롤링, 로그 파일 처리, CSV 읽기 등에서 자주 나타납니다.

1. UnicodeDecodeError 발생 원인

  • 파일 인코딩이 utf-8이 아닌데 디코딩을 utf-8로 시도함
  • Windows에서 생성된 파일(예: cp949, euc-kr 인코딩)을 utf-8로 읽음
  • 웹에서 다운로드한 파일이 인코딩 정보 없이 저장됨
  • 파일 내부에 깨진 문자(잘못 인코딩된 바이트)가 포함됨

2. UnicodeDecodeError 예시


with open("korean.txt", "r") as f:
    text = f.read()  # UnicodeDecodeError 발생 가능
오류 메시지 예:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb0 in position 0: invalid start byte

3. UnicodeDecodeError 해결 방법

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

파일의 실제 인코딩을 확인하고 `open()` 함수에서 `encoding` 인자를 명시합니다.

# Windows ANSI 파일의 경우
with open("korean.txt", "r", encoding="cp949") as f:
    text = f.read()

# EUC-KR도 자주 사용됨
with open("korean.txt", "r", encoding="euc-kr") as f:
    text = f.read()

3-2. 인코딩 자동 감지 (chardet)

파일의 인코딩을 모를 경우, `chardet` 라이브러리를 사용해 자동으로 감지할 수 있습니다.

import chardet

with open("korean.txt", "rb") as f:
    raw = f.read()
    result = chardet.detect(raw)

encoding = result["encoding"]
text = raw.decode(encoding)
print("감지된 인코딩:", encoding)

3-3. 디코딩 오류 무시하기

깨진 문자가 있어도 일단 무시하고 읽어야 하는 경우 `errors='ignore'` 또는 `errors='replace'` 옵션을 사용할 수 있습니다.

with open("korean.txt", "r", encoding="utf-8", errors="ignore") as f:
    text = f.read()
> ⚠️ 이 방법은 데이터 손실 가능성이 있으므로 로그나 임시 데이터 처리에만 권장됩니다.

3-4. pandas로 CSV 읽을 때 인코딩 지정


import pandas as pd

# 한글 CSV 파일을 cp949로 읽기
df = pd.read_csv("data.csv", encoding="cp949")

4. 인코딩 종류 정리

인코딩사용 예시
utf-8대부분의 웹, 국제 표준
cp949Windows 한글 문서
euc-kr옛날 웹사이트, 뉴스 데이터
iso-8859-1서유럽 언어권

5. 요약 및 결론

  • `UnicodeDecodeError`는 인코딩 불일치로 발생합니다.
  • 정확한 인코딩을 명시하면 대부분 해결됩니다.
  • 자동 인코딩 감지 라이브러리(chardet)를 활용해보세요.
  • 일시적으로는 오류 무시 옵션을 사용할 수 있지만, 근본 해결이 우선입니다.
이 가이드를 통해 Python에서 `UnicodeDecodeError`를 효과적으로 처리하고, 다양한 인코딩 데이터를 안정적으로 다룰 수 있습니다.