본문 바로가기
Python

[Python] 인코딩 에러(UTF8, CP949) 해결

by 찬'story 2022. 12. 22.

txt로 되어있는 데이터 파일을 불러오던 도중 종종 맞닥뜨리는 짜증나는 상황이 다시 한번 발견되었다.

더 이상 데이터 처리 과정에서 구글링에 애먹지 말자고 다짐하였기에, 해당 에러의 의미를 파헤치기로 했다.

 

UTF-8?

UTF-8은 전 세계적으로 가장 많이 사용되는 가변 길이 유니코드 인코딩이다.
유니코드? 가변길이? 천천히 알아보자

  • 유니코드 : 전 세계의 모든 문자를 다루기 위해 설계된 표준 문자 전산 처리 방식. 많이 들어본 ASCII코드 또한 유니코드이다.
  • 가변길이 유니코드 : 유니코드 한 문자를 나타내기 위해 UTF-8은 1byte ~ 4byte까지 사용 가능하며, 이를 가변 길이 인코딩 방식이라고 한다.

언어마다(국가마다) 인코딩 방법이 다르고, 한글을 위한 유니코드 또한 따로 존재한다.
그것이 바로 CP949이다.

이 때문에 'utf-8' codec can't decode byte 0xe9 in position 과 같은 오류가 발생하였을 때 많은 사람들이 encoding = 'cp949'를 추가하면 해결된다고 이야기하는 것이다. 하지만 나의 경우 해결되지 않았다.

 

 

국가별 상이한 인코딩

cp949는 분명 한글을 위한 인코딩이라고 했다. 그리고 해당 데이터는 GroupLens 연구소에서 1990년대 말부터 2000년대 초까지 MovieLens 사용자로부터 수집한 방대한 영화 평점 데이터이다. 때문에 영어권 인코딩을 사용할 필요가 있었다.

주요 유니코드를 살펴보자.

  • CP-437
    확장 ASCII 코드로 라틴 문자들과 기호 문자들로 추가해 256개의 문자를 모두 채웠다.
  • CP-1252
    윈도우에 사용되는 8-bit 영어권 문자 집합 코드이다. C1 구간(127~159)를 제외한 모든 문자가 유니코드와 동일하다.
  • CP-949
    윈도우의 기본 한글 코드 페이지로 멀티바이트(가변 길이) 인코딩
  • CP-65001
    유니코드 UTF-8의 윈도우 코드 페이지.

 

영어권 인코딩을 활용하여 encoding = 'cp1252'를 사용하였더니 문제는 해결되었다.

 

앞으로 UTF-8 오류때문에 고생하지말자 ㅎㅎ^^

'Python' 카테고리의 다른 글

Jupyter Notebook과 Git 연동  (0) 2022.07.01
[Python] 날짜 처리 방식  (0) 2021.07.17
[Python] 정규 표현식(3)  (0) 2021.07.08
[Python] 정규 표현식(2)  (0) 2021.07.08
[Python] 정규 표현식(1)  (2) 2021.06.29