Encode and decode MIME quoted-printable data using Python

When working with emails and web data, we often encounter non-ASCII characters that need special encoding. MIME quoted-printable encoding helps transmit such data safely over protocols that only support ASCII characters. Python provides built-in modules to handle this encoding and decoding efficiently.

Using the email Package

The email package includes modules for handling MIME encoding. Here's how to create a quoted-printable encoded message ?

import email.mime.nonmultipart
import email.charset

# Create MIME message with UTF-8 charset
msg = email.mime.nonmultipart.MIMENonMultipart('text', 'plain', charset='utf-8')

# Construct charset with quoted-printable encoding
cs = email.charset.Charset('utf-8')
cs.body_encoding = email.charset.QP

# Set content with Unicode characters
msg.set_payload('This is 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 text containing =C3=BCnic=C3=B6de

Using the quopri Module

The quopri module provides direct functions for quoted-printable encoding and decoding. This is more straightforward for simple string operations ?

Encoding Example

import quopri

text = 'äé'
encoded = quopri.encodestring(text.encode('utf-8'))
print("Original:", text)
print("Encoded:", encoded)
Original: äé
Encoded: b'=C3=A4=C3=A9'

Decoding Example

import quopri

encoded_text = '=C3=A4=C3=A9'
decoded_bytes = quopri.decodestring(encoded_text)
decoded_text = decoded_bytes.decode('utf-8')
print("Encoded:", encoded_text)
print("Decoded:", decoded_text)
Encoded: =C3=A4=C3=A9
Decoded: äé

Practical Email Processing Example

Here's how to handle quoted-printable content from real email data ?

import quopri

# Sample quoted-printable email content
email_content = "Hello! Caf=C3=A9 is open. Visit us at 123 Stra=C3=9Fe."

# Decode the content
decoded_content = quopri.decodestring(email_content).decode('utf-8')
print("Original email content:")
print(email_content)
print("\nDecoded content:")
print(decoded_content)
Original email content:
Hello! Caf=C3=A9 is open. Visit us at 123 Stra=C3=9Fe.

Decoded content:
Hello! Café is open. Visit us at 123 Straße.

Key Points

  • email.charset: Use for creating MIME messages with proper headers
  • quopri: Use for direct string encoding/decoding operations
  • Always encode to bytes before using encodestring()
  • Always decode bytes to string after using decodestring()

Conclusion

Python's quopri module provides simple functions for quoted-printable encoding/decoding, while the email package offers comprehensive MIME message handling. Use quopri for basic string operations and email.charset for complete email message processing.

Updated on: 2026-03-15T18:31:51+05:30

2K+ Views

Kickstart Your Career

Get certified by completing the course

Get Started
Advertisements