본문 바로가기
오류

'utf-8' codec can't decode byte 0xbf in position 0: invalid start byte

by 짱태훈 2024. 9. 23.
728x90

상황

공공 데이터 분석을 위해 csv 파일을 읽으려고 하니깐 에러가 발생했다.

import pandas as pd
import numpy as np

data = pd.read_csv('../../data/house/주택도시보증공사_신규분양세대수_20240731.csv')

'utf-8' codec can't decode byte 0xbf in position 0: invalid start byte

내용 = utf-8 방식으로 디코딩을 할 수 없다는 에러이다.

아 맞다. encoding 설정을 안 했네...

 

원인

 

  • 파이썬 파일 읽기 기본 설정: 파이썬에서 파일을 열 때 encoding을 따로 지정하지 않으면, 기본적으로 default 값인 UTF-8로 디코딩을 시도합니다.
  • 파일 인코딩 불일치: 파일이 UTF-8 이외의 다른 인코딩(예: ISO-8859-1, CP949, EUC-KR 등)으로 저장되어 있다면, 파이썬이 이 파일을 UTF-8로 해석하려고 할 때 디코딩 에러가 발생합니다.

해결

import pandas as pd
import numpy as np

data = pd.read_csv('../../data/house/주택도시보증공사_신규분양세대수_20240731.csv', encoding='cp949')

위의 코드와 같이 encoding = 'cp949'를 추가하면 된다.

여기서 CP949는 한국어를 표현하기 위한 문자 인코딩 방식 중 하나로 CP949는 EUC-KR을 확장한 인코딩 방식이다. 따라서 EUC-KR보다 더 많은 한글 글자와 특수 문자를 표현할 수 있도록 만들어진 인코딩 방식이다. 

UTF-8은 국제 표준으로 널리 사용되는 유니코드 기반 인코딩 방식이다. UTF-8은 전 세계 모든 언어를 표현할 수 있지만 CP949는 한국어에 특화되어 있어 CP949로 인코딩된 파일이나 문서를 다뤄야 하는 경우가 많다.

 

encoding을 적절히 사용한다면 아래와 같이 잘 가져올 수 있다.

728x90