파이썬에서 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로 인코딩 후 읽으면 에러가 발생하지 않고 출력된다.
일부 파이썬 사용자들은 반드시 필요한 경우가 아니라면 한글을 사용하지 않는게 더 편하다고 한다.
'Python > Basic' 카테고리의 다른 글
| [Python] xlsm TO csv (0) | 2024.08.12 |
|---|---|
| [Python] 함수로 분리하는 이유 (feat 메모리 효율성) (1) | 2024.06.10 |
| [Python] 클래스, 객체&인스턴스, 메서드 (1) | 2024.06.03 |
| [Python] 예외 처리 (0) | 2024.04.11 |
| [Python] enumerate() 함수 (1) | 2024.02.27 |