초보 데이터 분석가를 위한 문자 인코딩

🏷️ 정보

인코딩이란?

컴퓨터가 문자를 숫자로 변환하는 방식을 인코딩이라 부릅니다. 컴퓨터는 숫자 연산만 할 수 있죠. 정확히는 0과 1로만 이루어진 이진 연산만 합니다. 그래서 사람이 쓰는 십진법 숫자도 이진법으로 변환해 연산하죠. 그럼 문자는 어떻게 처리할까요? 인코딩은 컴퓨터가 문자를 이해하기 위한 가장 기본적인 방식입니다. 특히 한글이나 비영어권 문자를 포함하는 데이터를 다룬다면 더욱 잘 알아야 합니다.

1-encoding.png

문자를 변환하는 방식은 너무나도 많겠지만 몇 가지 잘 알려진 방법과 규칙이 있습니다. 컴퓨터가 서로 다른 방식으로 변환한다면 서로가 서로를 이해하지 못하겠죠. 변환하는 방식이 다르면 엉뚱한 글자가 표시됩니다. 흔히 파일이나 문자가 깨졌다고 표현하죠. 데이터 분석을 하려면 일반 텍스트 파일도 읽어야 하고, 엑셀 파일도 읽어야 하고, CSV 파일도 읽어야 합니다. 그 파일을 만든 운영 체제까지 다를 때가 많습니다. 인코딩 방식을 잘 알아두지 못하면 불러온 데이터가 와장창 깨질겁니다. 운영 체제와 프로그램과 파일 형식에 따라 사용하는 인코딩 방식이 다르기 때문입니다.

주요 인코딩 방식

ASCII (American Standard Code for Information Interchange)

특징:

사용 범위:

예시:


EUC-KR (Extended Unix Code - Korea)

특징:

장점:

단점:

사용처:


CP949 (Code Page 949) / MS949

특징:

장점:

단점:


UTF-8 (Unicode Transformation Format - 8bit)

특징:

바이트 구조:

장점:

단점:

예시:


UTF-8-SIG (UTF-8 with BOM)

특징:

장점:

단점:

사용처:

Python 예시:


<!-- -->
# Excel에서 한글이 깨지지 않게 CSV 저장
import pandas as pd
df.to_csv('data.csv', encoding='utf-8-sig', index=False)

UTF-16 / UTF-32

UTF-16 특징:

UTF-32 특징:

사용처:


ISO-8859-1 (Latin-1)

특징:

사용처:


인코딩 선택 가이드

새 프로젝트를 시작한다면?

→ UTF-8을 사용하세요

거의 모든 경우에 UTF-8이 정답입니다. 웹 표준이며 모든 언어를 지원합니다.

Excel용 CSV를 만든다면?

→ UTF-8-SIG를 사용하세요

df.to_csv('file.csv', encoding='utf-8-sig')

레거시 한국 시스템과 연동한다면?

→ CP949 또는 EUC-KR을 사용하세요

하지만 가능하면 시스템을 UTF-8로 업그레이드하는 것이 좋습니다.

영문만 사용한다면?

→ UTF-8 또는 ASCII

UTF-8이 ASCII와 호환되므로 UTF-8 사용을 권장합니다.


인코딩 문제 해결

한글이 깨져 보이는 경우

증상: 한글한글 원인: UTF-8로 저장된 파일을 EUC-KR로 읽음 해결: 올바른 인코딩 지정


<!-- -->
# 파일 인코딩 자동 감지
import chardet

with open('file.txt', 'rb') as f:
    result = chardet.detect(f.read())
    print(result['encoding'])


<!-- -->
# 올바른 인코딩으로 다시 읽기
with open('file.txt', 'r', encoding='utf-8') as f:
    content = f.read()

인코딩 변환


<!-- -->
# EUC-KR → UTF-8 변환
with open('old.txt', 'r', encoding='euc-kr') as f:
    content = f.read()

with open('new.txt', 'w', encoding='utf-8') as f:
    f.write(content)

현대 개발 환경의 표준

지금까지 이야기한 인코딩 방식을 가볍게 정리하겠습니다:

2025년 현재는 주로 UFT-8을 사용합니다. 웹 표준이기 때문이죠.

저는 보통 UTF-8을 기본으로 생각합니다. 하다가 데이터를 잘 못불러온다 하면 cp949로 바꿔봅니다. 그리고 엑셀 파일을 다룬다 싶으면 UTF-8-SIG를 사용합니다. 이런 식으로 몇 가지 요령만 터득하면 데이터 깨짐 현상을 크게 줄이고 스트레스도 줄일 수 있습니다.