Article Categories
- All Categories
-
Data Structure
-
Networking
-
RDBMS
-
Operating System
-
Java
-
MS Excel
-
iOS
-
HTML
-
CSS
-
Android
-
Python
-
C Programming
-
C++
-
C#
-
MongoDB
-
MySQL
-
Javascript
-
PHP
-
Economics & Finance
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.
