데이터 분석/Python

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xb1 in position 0: invalid start byte 해결방법

cjangela 2025. 2. 7. 14:50

오류 발생 이미지 - ai 이용
챗gpt를 통해 만들었습니다.

반응형

1. 오류 발생

  • 파이썬에서 데이터를 분석할 때, 가장 먼저 해야 할 일은 데이터 파일을 불러오는 것입니다. 특히 .csv 파일을 활용하는 경우가 많은데, pandas 라이브러리의 read_csv() 함수를 사용하여 데이터를 로드할 수 있습니다. 하지만 파일을 불러오는 과정에서 예기치 않은 오류가 발생할 수 있습니다. 그중에서 가장 흔한 오류 중 하나가 바로 UnicodeDecodeError입니다.
  • 예를 들어, 다음과 같이 csv 파일을 불러올 때, 다음과 같은 오류 메시지가 출력될 수 있습니다.
import pandas as pd
df = pd.read_csv("data.csv")
[출력 결과]
UnicodeDecodeError:
'utf-8' codec can't decode byte 0xb1 in position 0: invalid start byte
  • 이 오류 메시지는 파이썬이 해당 파일을 UTF-8 인코딩 방식으로 읽으려고 시도했지만, 특정 바이트(0xb1)가 UTR-8 형식과 일치하지 않기 때문에 발생하는 문제입니다. 이는 곧 해당 파일이 UTF-8이 아닌 다른 인코딩 방식으로 저장되었음을 의미합니다.

2. 오류 발생 원인

  • 이 오류는 주로 파일의 인코딩(Encoding) 방식이 맞지 않을 때 발생합니다. 인코딩이란, 문자를 컴퓨터가 이해할 수 있도록 변환하는 방식을 의미합니다. 일반적으로 csv 파일을 저자할 때, 여러 인코딩 방식이 사용됩니다. 대표적인 인코딩 방식은 다음과 같습니다.
✅ UTF-8 : 대부분의 프로그래밍 언어에서 기본적으로 지원하는 인코딩 방식입니다. 영어 및 대부분의 유니코드 문자를 표현할 수 있습니다.
✅ CP949 / EUC-KR : 한국에서 많이 사용되는 한글 인코딩 방식입니다. 윈도우에 생성된 csv 파일은 종종 CP949 또는 EUC-KR로 저장됩니다.
✅ ISO-8859-1 / Latin-1 : 서유럽 언어를 포함한 특정 문자셋을 지원하는 인코딩 방식입니다.
✅ Shift-JIS : 일본어 문자 인코딩 방식입니다.
  • csv 파일이 UTF-8이 아닌 다른 인코딩 방식으로 저장되었다면 데이터를 불러왔을 때, 오류가 발생할 수도 있습니다. 특히 윈도우 환경에서는 기본적으로 CP949 또는 EUC-KR 인코딩이 많이 사용되기에 이와 관련된 인코딩 오류가 자주 발생할 수 있습니다.

3. 해결 방법

  • 이 오류를 해결하기 위한 방법은 간단합니다. 파일의 실제 인코딩 방식을 파악한 후, read_csv() 함수에서 적절한 인코딩을 지정해 주면 됩니다.

1) 파일 인코딩 방식 확인하기

import chardet

# 파일을 바이너리 모드로 읽고, 일부 샘플을 추출하여 인코딩을 확인
with open("data.csv", "rb") as f:
    result = chardet.detect(f.read(100000))
    print(result['encoding'])
  • 이와 같은 방식으로 파일이 어떠한 인코딩 방식으로 저장됐는지를 확인할 수 있습니다.
  • 이에 따른 결과값은 CP949, EUC-KR, UTF-8 등으로 나타날 것입니다.

2) 적절한 인코딩 방식으로 파일 불러오기

  • 파일이 어떠한 인코딩 방식인지를 알았다면, 데이터를 불러올 때 경로 뒤에 encoding = 을 입력하여 해결할 수 있습니다.
  • 파일의 인코딩이 CP949로 저장되었다면, 다음과 같이 encoding = "cp949"를 입력해 주시면 됩니다.
  • 아마도 이 인코딩 방식에 의한 오류로 인해 제 블로그를 찾으신 분들이 많지 않을까 합니다.
df = pd.read_csv("파일 경로", encoding = "cp949")
  • 이와 마찬가지로 EUC-KR, ISO-8859-1 등의 인코딩 방식도 똑같이 해결할 수 있습니다.
# EUC-KR 인코딩 방식일 때,
df = pd.read_csv("파일 경로", encoding = "euc-kr")

# ISO-8859-1 인코딩 방식을 때,
df = pd.read_csv("파일 경로", encoding = "ISO-8859-1")

4. 결론

파이썬에서 csv 파일을 읽을 때 발생하는 UnicodeDecodeError는 주로 파일의 인코딩 방식이 다를 때 발생합니다. 따라서 문제를 해결하는 방식은 다음과 같습니다.

  1. 파일의 인코딩 방식을 먼저 확인한다. ('chardet.detect()' 사용)
  2. 적절한 인코딩 옵셩을 추가하여 read_csv() 함수를 사용한다. (예: encoding = "cp949")

이러한 방법을 숙지하면, 데이터 분석 과정에서 발생하는 파일 인코딩 오류를 손쉽게 해결할 수 있습니다.