본문 바로가기
Python/ERROR

[Python Error] UnicodeDecodeError: 'cp949' codec can't decode byte 오류

by 오늘은강박사갈거야~~ 2021. 7. 5.
반응형

이 글은 공부하며 정리한 내용입니다. 틀리거나 보완할 점이 있다면 댓글로 알려주시면 감사하겠습니다.


1. 핵심 요약

  • UnicodeDecodeError: 'cp949' codec can't decode byte 에러는 파이썬이 파일을 읽을 때, 기본 인코딩(cp949 또는 ANSI)으로 읽으려다 실패할 때 발생한다.
  • 파일의 실제 인코딩 방식과 읽을 때 설정된 인코딩이 일치하지 않으면 발생한다.
  • 보통 UTF-8로 저장된 파일을 Windows 환경에서 열 때 많이 발생한다.

2. 상세 내용 설명

2-1. 에러 메시지 예시

UnicodeDecodeError: 'cp949' codec can't decode byte 0xed in position 42: illegal multibyte sequence
  • 'cp949'는 Windows에서 기본적으로 사용하는 문자 인코딩 방식이다.
  • 0xed는 해당 인코딩 방식으로 해석할 수 없는 바이트로, UTF-8과 같은 다른 인코딩에서 쓰인 문자일 가능성이 높다.

2-2. 원인

  • 파이썬 3에서 open() 함수로 파일을 열 때 인코딩을 명시하지 않으면,
    Windows에서는 기본적으로 cp949로 열려고 시도한다.
  • 그러나 파일이 실제로 UTF-8, EUC-KR 등의 다른 인코딩으로 저장된 경우 디코딩 에러가 발생한다.

2-3. 해결 방법

✅ 인코딩 명시

with open('example.txt', mode='r', encoding='utf-8') as f:
    content = f.read()
  • 파일의 실제 인코딩 방식이 utf-8이라면 위와 같이 명시적으로 encoding 파라미터를 지정해야 한다.
  • utf-8, euc-kr, iso-8859-1 등 상황에 맞는 인코딩으로 지정

✅ 인코딩 확인 방법 (Linux/macOS)

file -i example.txt
  • 출력 결과: example.txt: text/plain; charset=utf-8 → utf-8 인코딩 확인 가능

✅ 인코딩 확인 방법 (Windows)

  • 메모장으로 열기 → "다른 이름으로 저장" 클릭 → 저장창 하단의 "인코딩" 항목에서 확인 가능

✅ 인코딩 확인 – 파이썬 라이브러리 사용

  • chardet 또는 charset-normalizer 라이브러리를 이용하면 파일의 인코딩을 추정할 수 있다.
import chardet

with open('example.txt', 'rb') as f:
    result = chardet.detect(f.read())

print(result['encoding'])
  • 정확도가 100%는 아니지만, 파일 인코딩을 모를 때 참고용으로 유용하다.
  • 설치: pip install chardet

3. 결론

문자 인코딩 문제는 운영체제와 파일 저장 환경에 따라 달라질 수 있다.
Python에서 텍스트 파일을 읽을 때는 항상 인코딩을 명시하는 습관을 들이는 것이 좋다.

특히 Windows 환경에서는 cp949가 기본 인코딩이기 때문에,
UTF-8로 저장된 파일은 encoding='utf-8'을 지정해야 오류 없이 읽을 수 있다.


4. 참고 자료

반응형

댓글