1 인코딩(Encoding)이란 무엇인가?
1) 인코딩 개념
→ 컴퓨터는 글자를 직접 이해하지 못하고 오직 0과 1(숫자)만 인식함
→ 그래서 문서를 숫자로 바꾸는 규칙(번역기)인 인코딩이 필요함
→ 반대로, 숫자를 문자로 되돌리는 과정이 디코딩(Decoding)임
2) 쉽게 비유하자면
→ 한글 편지를 영어 사전으로 해석하려 하면 엉뚱한 말이 나오는 것과 같음
→ 즉, 저장(인코딩)과 읽기(디코딩)의 규칙이 달라지면 글자가 깨짐
2 문자열(str)과 바이트(bytes) 차이
1-1 코드
text = '파이썬'
encoded = text.encode('utf-8')
print(text) # 파이썬
print(encoded) # b'\xed\x8c\x8c\xec\x9d\xb4\xec\x8d\xac'
print(type(text)) # str
print(type(encoded)) # bytes
→ str은 사람이 읽는 글자임
→ bytes는 컴퓨터가 저장하는 숫자 데이터임
→ encode()는 문자열을 바이트로 변환함
→ decode()는 바이트를 문자열로 변환함
1-1 결과

3 인코딩 <-> 디코딩 실습
2-1 코드
text = 'Hello 파이썬!'
encoded = text.encode('utf-8')
decoded = encoded.decode('utf-8')
print('원본:', text)
print('인코딩:', encoded)
print('디코딩:', decoded)
2-1 결과

→ 같은 규칙으로 인코딩과 디코딩을 해야 원본 그대로 복원됨
→ 규칙이 다르면 깨짐이 발생함
4 UTF-8 vs CP949 비교
3-1 코드
text = '파이썬'
print(text.encode('utf-8'))
print(text.encode('cp949'))
3-1 결과

| 구분 | UTF-8 | CP949 |
| 지원 문자 | 전 세계 언어 | 한글 전용 |
| 바이트 수 | 가변 (한글 3바이트) | 고정 (2바이트) |
| 주요 사용처 | macOS, Linux, 웹 | Windows(한국어) |
5 인코딩 오류와 해결법
| 오류 | 원인 | 해결 |
| UnicodeEncodeError | 문자를 바이트로 변환 시 발생하는 문제 | encoding='utf-8'을 명시 |
| UnicodeDecodeError | 바이트를 문자로 변환 시 발생하는 문제 | 저장 인코딩과 같은 인코딩으로 읽기 |
→ 같은 인코딩으로 읽고 써야 함
6 환경별 인코딩 차이
| 환경 | 기본 인코딩 | 특징 |
| Windows CMD | CP949 | 오래된 한글 전용으로 깨짐이 잦음 |
| Excel | utf-8-sig로 저장해야 정상적으로 표시 | |
| PowerShell (Win11) | UTF-8 | 최신 버전은 UTF-8을 지원 |
| mac / Linux | 국제 표준이며, 깨짐이 거의 없음 | |
| VSCode / PyCharm | 기본값이며 안정적임 |
4-1 코드 : VSCode 설정 예시 (settings.json)
"files.encoding": "utf8",
"files.autoGuessEncoding": false
4-2 명령어 : CMD에서 UTF-8 전환
chcp 65001
7 인코딩 확인 & 변환 실습
1) chardet 모듈로 인코딩 감지
5-1 명령어 : chardet 설치
pip install chardet
5-2 코드
import chardet
with open('example.txt', 'rb') as f:
data = f.read()
print(chardet.detect(data)) # {'encoding': 'utf-8', 'confidence': 0.99}
5-2 결과

2) 인코딩 변환 (CP949 -> UTF-8)
5-3 코드
with open('old.txt', 'r', encoding='cp949') as f:
data = f.read()
with open('new.txt', 'w', encoding='utf-8') as f:
f.write(data)
→ 변환 후 한글이 정상적으로 출력되면 성공임
→ CSV/Excel용은 encoding='utf-8-sig'를 추천함
8 한글 깨짐 문제 해결 총정리
1) 자주 깨지는 원인
→ 저장과 읽기의 인코딩이 다를 때
→ OS, 에디터, 터미널 간 인코딩 불일치
→ Excel은 UTF-8을 제대로 인식하지 못함
2) 해결 원칙 4가지
→ 인코딩을 항상 명시 (encoding='utf-8')
→ 모든 환경을 UTF-8로 통일
→ CSV는 utf-8-sig로 저장
→ 터미널은 UTF-8 모드로 설정
9 파일별 추천 인코딩
| 파일 종류 | 추천 인코딩 | 이유 |
| Python (.py) | UTF-8 | 파이썬 3 기본값 |
| 텍스트 (.txt) | 범용성 최고 | |
| JSON / HTML | 웹 표준 | |
| 로그파일 | OS 독립적 | |
| CSV (Excel용) | UTF-8-sig | Excel 호환 |
Python 문자 인코딩 - 2에 대해 더 상세한 설명을 원하는 분들은 아래 사이트에 접속하기
Python 문자 인코딩 -2 뿐만 아니라 다른 프로그래밍 언어에 대해 알고 싶은 분들은 아래 사이트에 접속하여 원하는 링크에 접속하기
'파이썬 > 첫 실행과 기본 사용법' 카테고리의 다른 글
| UTF-8 완전정복: 문자 -> 코드포인트 -> 바이트까지 이해하기 (0) | 2025.10.20 |
|---|---|
| 파이썬 들여쓰기 완전 정복 : PEP 8 기준 + VSCode 자동 설정 가이드 (0) | 2025.10.17 |
| 파이썬 input() 완벽 가이드 | 한 줄 입력부터 여러 줄, 예외 처리, sys.stdin, 환경 변수까지 총정리 (0) | 2025.10.10 |
| 파이썬 .py 파일 실행 방법 총정리 | 초보자부터 실무까지 완벽 가이드 (0) | 2025.09.30 |
| 파이썬 주석 & 타입 힌트 완벽 가이드 | PEP 8, Docstring까지 한 번에 정리 (1) | 2025.09.17 |