본문 바로가기
코딩 연습/파이썬 기초(예제)

파이썬에서 인코딩과 디코딩

by good4me 2022. 11. 18.

goodthings4me.tistory.com

파이썬 코딩 시 접하게 되는 인코딩과 디코딩을 알아보기 위해 파이썬 문자열 데이터를 encode() 함수로 인코딩하고, 다시 decode() 함수로 디코딩 해본다.

 

 

인코딩(Encoding) - 암호화

인코딩 종류 : ASCII, URL인코딩, HTML인코딩, Base64인코딩, 유니코드인코딩

※ 유니코드 인코딩 참고 사이트 : https://home.unicode.org

 

encode() 함수를 이용하여 가장 많이 사용되는 유니코드 인코딩 중 utf-8 인코딩을 하면,

s = 'Life is too short'
str_enc = s.encode('utf-8')
print(str_enc, type(str_enc))
# b'Life is too short' <class 'bytes'>

kor = '한국'
kor_enc = kor.encode('utf-8')
print(kor_enc)
# b'\xed\x95\x9c\xea\xb5\xad'

인코딩을 하면 타입이 bytes로 나온다. 영문은 b'가 앞에 붙고 나머지는 그대로 보이지만, 한글을 인코딩하면 알아보기 힘든 구조로 됨. 그래서 한글 인코딩이 잘 못 되면 글자가 깨져보임

 

디코딩(Decoding) - 복호화

사람이 이해할 수 있는 언어도 되돌리는 것.

※ 유니코드 변환 사이트 : https://checkserp.com/encode/unicode

 

good4me.co.kr

 

인코딩된 한글을 decode() 함수로 디코딩을 해보면, 정상적으로 보이나 다른 디코더로 디코딩할 경우는 에러 발생(즉, 인코딩 했던 방식으로 디코딩 해야 함)

 

kor_dec = kor_enc.decode('utf-8')
print(kor_dec, type(kor_dec))
# 한국 <class 'str'>

kor_dec = kor_enc.decode('ascii')
print(kor_dec, type(kor_dec))
# UnicodeDecodeError: 'ascii' codec can't decode byte 0xed in position 0: ordinal not in range(128)

 

이모지 활용해보기

 

print('Learning Python : ', '\U0001F400')
print('Learning Python : ', '\U0001F40D')
Learning Python :  🐀
Learning Python :  🐍

 

python 버전 2.x인 경우, ASCII가 기본 인코딩이었으나 3.x 버전부터 utf-8로 변경되었다. 코딩 시 소스코드 파일이 어떤 방식으로 인코딩되었는지 명시하는 방법은 맨 처음에 아래와 같이 입력한다.

# -*- coding: utf-8 -*-

 

 

 

댓글