본문 바로가기

Python/Basic

[Python] UnicodeDecodeError: 'cp949' codec can't decode byte 0xec in position number : illegal multibyte sequence 에러 해결

파이썬에서 UnicodeDecodeError가 발생했을 때 해결 방법

 

맥(개인pc)에선 잘 실행되던 코드가 회사 pc(윈도우)에서 실행하니 UnicodeDecodeError가 발생했다.

# /code/example.json
{
    "apple": "사과",
    "pair": "배",
    "grapes": "포도"
}

# /code/app.py
import json

with open("example.json", "r") as f :
    example_json = json.load(f)

print(example_json)
>>> UnicodeDecodeError: 'cp949' codec can't decode byte 0xec in position 17: illegal multibyte sequence

 

찾아보니 텍스트 파일 저장 시, 윈도우에선 기본적으로 cp949 인코딩 방식으로 저장하고 파이썬에서 텍스트 파일을 작업할 땐 기본적으로 utf-8 방식을 사용한다고 한다.

  • cp949 : 한글 하나당 2바이트로 저장
  • utf-8 : 한글의 초성, 중성, 종성 각각을 1바이트로 저장

 

결론적으로 cp949로 인코딩된 파일에 한글이 포함된 경우, 파이썬에선 utf-8 방식으로 읽기 때문에 UnicodeDecodeError가 발생했다고 유추할 수 있다.

 

 

해결 방법

# 기존
with open("example.json", "r") as f :

# 수정
with open("example.json", "r", encoding="UTF8") as f :
>>> {'apple': '사과', 'pair': '배', 'grapes': '포도'}

 

기존 json 파일을 utf-8로 인코딩 후 읽으면 에러가 발생하지 않고 출력된다. 

 

 

일부 파이썬 사용자들은 반드시 필요한 경우가 아니라면 한글을 사용하지 않는게 더 편하다고 한다.