파이썬/첫 실행과 기본 사용법

파이썬 한글 깨짐 완전 해결! 인코딩(UTF-8·CP949) 차이부터 오류 원인, 실습, 환경 설정까지 총정리

creator6556 2025. 10. 25. 15:52

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 결과


728x90

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


Python 문자 인코딩 -2 뿐만 아니라 다른 프로그래밍 언어에 대해 알고 싶은 분들은 아래 사이트에 접속하여 원하는 링크에 접속하기

프로그래밍 언어 정리 모음 

728x90