실무에서 데이터를 다루다 보면 항상 일반 ASCII 문자만 포함되어 있지는 않습니다. 예를 들어, 영어가 아닌 다른 언어로 작성된 이메일이 대표적인 경우입니다. Python은 MIME(Multipurpose Internet Mail Extensions) 기반 모듈을 활용해 이러한 특수 문자를 손쉽게 처리할 수 있는 메커니즘을 제공합니다. 이 글에서는 이메일 본문이나 일반 입력 데이터에 포함된 특수 문자를 인코딩하고 디코딩하는 방법을 살펴보겠습니다.
email 패키지 활용하기
Python의 email 패키지에는 mime과 charset 모듈이 포함되어 있으며, 이를 통해 인코딩과 디코딩 작업을 수행할 수 있습니다. 아래 예제에서는 유니코드 문자가 포함된 이메일 메시지를 생성한 후 UTF-8로 인코딩하는 과정을 보여줍니다.
예제 코드
import email.mime, email.mime.nonmultipart, email.charset
msg=email.mime.nonmultipart.MIMENonMultipart('text', 'plain', charset='utf-8')
# 새로운 charset 생성
cs=email.charset.Charset('utf-8')
cs.body_encoding = email.charset.QP
# 새로운 charset으로 내용 설정
msg.set_payload(u'This is the text containing ünicöde', charset=cs)
print(msg)위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
실행 결과
Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable This is the text containing =C3=BCnic=C3=B6de
quopri 모듈 활용하기
Python의 quopri 모듈은 quoted-printable 전송 인코딩 및 디코딩을 수행합니다. quoted-printable 인코딩은 출력 불가능한(nonprintable) 문자가 상대적으로 적은 데이터를 위해 설계된 방식입니다. 아래 예제에서는 일반 ASCII가 아닌 문자가 포함된 문자열을 인코딩하고 디코딩하는 방법을 확인할 수 있습니다.
예제 코드
import quopri
str1 = 'äé'
encoded = quopri.encodestring(str1.encode('utf-8'))
print(encoded)
str2 = '=C3=A4=C3=A9'
decoded_string = quopri.decodestring(str2)
print(decoded_string.decode('utf-8'))위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
실행 결과
b'=C3=A4=C3=A9' äé
정리
이처럼 Python은 email 패키지와 quopri 모듈을 통해 MIME quoted-printable 방식의 인코딩과 디코딩을 간편하게 처리할 수 있습니다. 특히 다국어 이메일을 다루거나 비 ASCII 문자가 포함된 텍스트 데이터를 안전하게 전송해야 할 때 이러한 기능이 매우 유용합니다.