본문 바로가기

Life/Daily & Tips

[Tips] "UnicodeDecodeError: 'cp949' codec can't decode ~~ : illegal multibyte sequence" 오류 해결 방법(python/인코딩)

SMALL

안녕하세요! 데코입니다!

오늘은 파이썬에서 종종 발생하는 오류에 대해서 해결 방법을 포스팅하려고 합니다!

 

파이썬에서 txt, csv 파일을 불러오는 과정에서 아래와 같은 오류 뜬 적이 있으신가요?

"UnicodeDecodeError: 'cp949' codec can't decode ~~ : illegal multibyte sequence"

저도 최근에 이러한 오류가 발생하고 해결 방안에 대하여 적으려고 합니다!

 

저는 pandas 패키지의 read_csv()를 이용하여 csv 형식의 데이터를 불러올 때 위와 같은 오류가 발생했어요!

 

cp949와 euc-kr은 한글 처리가 가능한 encoding 이에요!
특수문자가 포함되어 있으면 UTF-8 혹은 UTF-16의  encoding을 사용하는데,

기존 한글과 호환되지 않은 문자가 많아서 오류가 발생하기도 합니다!

 

따라서 처음에는 encoding='cp949' / encoding='euc-kr' / encoding='UTF-8' encoding='UTF-16' 등

인코딩 형식을 변경해주었는데, 동일한 문제가 계속 발생했습니다.

 

직접 csv 파일을 열어서 확인해본 결과, 특수문자도 없더라고요!

 

read_csv()에 존재하는 옵션인 skiprows을 이용해서 문제가 있는 행을 찾아보았어요!

 

df1 = pd.read_csv('path/test.csv', skiprows = 1000)   # 1000행을 생략하고 불러옴
df2 = pd.read_csv('path/test.csv', skiprows = 100)   # 100행을 생략하고 불러옴
df3 = pd.read_csv('path/test.csv', skiprows = 50)   # 50행을 생략하고 불러옴

 

이렇게 범위를 줄이면서 문제가 있는 행을 유추하고 이후에 데이터를 직접 확인해본 결과

특정 데이터값에 '공백'이 존재하더라고요.....

(공백이 생긴 원인은 DB에 특정 값들은 수기로 입력했고, 그 과정에서 공백이 들어간 것으로 추정됩니다!)

 

공백을 포함한 데이터를 찾아서 공백을 제거하고 저장 후

다시 불러온 결과 잘 불러와져서 해결하고 마무리했습니다!

 

이번에 오류 발생하는 것을 보면서

다른 데이터에서도 지금과 똑같은 오류가 발생했던 것이 기억났어요!

그때의 원인도 문자열 끝에 공백이 존재해서 문제가 발생했고, 똑같은 오류 범하지 않게 이렇게 포스팅으로 남깁니다! :)


"UnicodeDecodeError: 'cp949' codec can't decode ~~ : illegal multibyte sequence"

해결 방법

  1. encoding 값을 변경해서 시도한다(encoding='cp949' / encoding='euc-kr' / encoding='UTF-8' / encoding='UTF-16')
  2. 파일을 직접 열어 공백이 있는지를 확인하고 공백을 제거한다.
    skiprows 옵션을 이용해서 문제가 발생하는 행(row)를 유추하며 범위를 축소한다.

 

 

다들 오류 없는 코딩 해보아요!

읽어주셔서 감사합니다! :)

 

LIST