카테고리 없음
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를 효과적으로 해결하여 안정적인 텍스트 처리가 가능합니다.