Python/Debugging

UnicodeEncodeError: 'cp949' codec can't encode character 원인 / 해결 방법

jimmy_AI 2023. 9. 19. 23:08
반응형

오류 개요

파이썬에서 txt나 json 파일을 read/write 하는 과정에서 다음과 같은 오류가 발생하였습니다.

UnicodeDecodeError: 'cp949' codec can't decode byte 0xec in position 122: illegal multibyte sequence

 

참고로, 해당 코드는 리눅스 체제에서는 정상 작동되었는데,

에러가 발생한 운영체제 환경은 윈도우였고, 한국어 세팅이었습니다.

 

 

오류 원인

한국어 환경에서의 인코딩은 'cp949'로 지정이 된 경우가 많은데,

유니코드('utf-8') 등 다른 인코딩 방법으로 인코딩된 파일을 다루는 경우,

인코딩 버전 불일치로 인하여 해당 에러가 발생할 수 있습니다.

 

 

오류 해결법

파일을 다루는 과정에서 encoding 방법을 명시적으로 지정해주시면 해결이 쉽게 가능합니다.

with open('my_file.txt', 'r', encoding='utf-8') as f:
    data = f.read()

 

만일, 인코딩 방법을 직접 찾기 어려운 경우에는 chardet 라이브러리를 활용하여

인코딩 방법을 찾은 뒤에, 명시적으로 지정을 해주시면 됩니다.

import chardet # 설치 필요 시 !pip install chardet

with open('my_file.txt', 'rb') as f:
    result = chardet.detect(f.read())
    file_encoding = result['encoding']

with open('my_file.txt', 'r', encoding=file_encoding) as f:
    data = f.read()