본문 바로가기
Programming/Python

[Error] Python json 파일 읽어 올때 : json.decoder.JSONDecodeError: Unexpected UTF-8 BOM

by 근육곰돌이 2022. 1. 4.
728x90

json은 모든 프로그램에 자주 쓰이는 형태인데요

이번엔 python에서 json파일을 읽을 때 에러가 발생하여 포스팅을 작성하게 되었습니다.

 

문제

json파일 읽기 시 아래와 같이 문제가 발생함

문제 코드

with open(file_path, 'r', encoding='utf-8-sig') as json_file:
    json_data = json.load(json_file)
    print (json_data)

에러

  File "/usr/lib/python3.8/json/__init__.py", line 337, in loads
    raise JSONDecodeError("Unexpected UTF-8 BOM (decode using utf-8-sig)",
json.decoder.JSONDecodeError: Unexpected UTF-8 BOM (decode using utf-8-sig): line 1 column 1 (char 0)

 

원인

해당 json은 BOM으로 디코드를 할수 없다고 나와있습니다.

오류 메세지 처럼 파일 디코드 문제입니다. BOM문자로 인한 예상치 못한 exception이 발생한것이죠

친절하게도 파일 읽을 때 BOM포함 utf-8로 디코드하면 될것 입니다.

 

조치

"utf-8-sig"의 "sig"는 "signature"(즉, signature utf-8 파일)의 약어입니다. utf-8-sig를 사용하여 파일을 읽으면 BOM을 파일 정보로 취급합니다

--> 에러 코드
with open(file_path, 'r', encoding='utf-8') as json_file:
    

--> 조치 : utf-8-sig
with open(file_path, 'r', encoding='utf-8-sig') as json_file:
    json_data = json.load(json_file)
    print (json_data)
    

 

 

참고 자료

https://stackoverflow.com/questions/57152985/what-is-the-difference-between-utf-8-and-utf-8-sig

 

What is the difference between utf-8 and utf-8-sig?

I am trying to encode Bangla words in python using pandas dataframe. But as encoding type, utf-8 is not working but utf-8-sig is. I know utf-8-sig is with BOM(Byte order mark). But why is this call...

stackoverflow.com

 

반응형