[한글 인코딩(UTF8, CP949)]인코딩이 뭐야? 이건 무슨 에러인거야?

문제상황

파이썬은 주피터 노트북으로 많이 작업 한다. pandas를 import한 후, csv파일을 read_csv로 읽어올 때 종종 다음과 같은 에러가 발생한다.

### 인코딩 에러
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xc7 in position 0: invalid continuation byte

utf-8 은 decode를 할 수 없다고? utf-8은 뭐지?

라면서 동공지진 일으킬 수 있는 분들을 위한 글이다. 도움이 되셨으면 한다.

인코딩이란,

컴퓨터 안에서는 문자든 숫자든 모두 숫자(‘01010001110011…’)로 나타낸다. 우리가 사용하는 텍스트를 기계가 이해하는 언어로 표현하는 방법을 인코딩(encoding)이라고 한다.

예를 들어, 대문자 A는 65로 나타나지고 소문자 a는 97로 나타내야 기계들이 알아듣는다는 이야기이다. 아래는 이러한 것들은 표로 정리된 것 들인데 ASCII TABLE이라고 불린고 미국에서 만든 최초의 문자열 인코딩 방법이다.

아스키 코드 테이블

언어도 영어, 중국어, 프랑스어 등등 엄청 많은데 국가별로 인코딩의 방법은 다를까?

맞다. 다 다르다.

그렇다면, ‘한글을 기계가 이해시키려면 어떤 인코딩을 해야 할까 ‘라는 생각인 든다.

여러개가 있는데 그중 가장 많이 사용되는 것이 CP949와 UTF-8인 것이다.

CP949(확장 완성형)

CP949는 사실 이전에 유닉스 계열에서 나온 EUC-KR에 생긴 문제를 해결하기 위해 만들어졌다. ‘MS949, WINDOWS949’라고도 불리기도 한다. 아까도 이야기 했지만, 국가별로 인코딩 방법이 다르다. (일본어는 CP932)

UTF-8(유니코드)

유니코드는 전 세계의 모든 문자를 컴퓨터에서 일관되게 표현할 수 있도록 고안된 코드 조합(인코딩이 아닌 문자와 2바이트 숫자와 1:1 매핑하는 방식)이다. 유니코드를 인코딩하는 방식중 하나가 UTF-8인 것이다.

운영체제별로 사용하는 인코딩이 다르다?

운영체제별 사용하는 인코딩

맞다. 운영체제별로 사용하는 인코딩 방식이 다르다.

마이크로 소프트는 CP949

맥과 리눅스는 UTF-8

사실, 각 운영체제로 만든 파일에 대한 처리는 가능하지만, 깨짐이 발생 할 수 있다는 리스크가 존재한다.

문제해결

위의 인코딩 문제를 해결 하는 방법은 간단하다. 다음과 같이 코드를 추가하면 된다.

encoding 코드 추가

그리고 df를 확인해보았다. ch1_sport_test.csv 파일이 정상적으로 읽어왔음을 확인 할 수 있다.

--

--

Ella Vibe (Sooyeon Lee)
Ella Vibe (Sooyeon Lee)

Written by Ella Vibe (Sooyeon Lee)

Interested in AI, ML, agile, community domain. Love Zumba!

No responses yet