Daniel Lenski <[email protected]> added the comment:
I recently ran into this bug as well.
For those looking for a reliable workaround, here's an implementation of a
'decode_header_to_string' function which should Just Work™ in all possible
cases:
#!/usr/bin/python3
import email.header
# Workaround for https://bugs.python.org/issue22833
def decode_header_to_string(header):
'''Decodes an email message header (possibly RFC2047-encoded)
into a string, while working around
https://bugs.python.org/issue22833'''
return ''.join(
alleged_string if isinstance(alleged_string, str) else
alleged_string.decode(
alleged_charset or 'ascii')
for alleged_string, alleged_charset in
email.header.decode_header(header))
for header in ('=?utf-8?B?ZsOzbw==',
'=?ascii?Q?hello?==?utf-8?B?ZsOzbw==?=',
'bar=?ascii?Q?hello?==?utf-8?B?ZsOzbw==?=',
'plain string',):
print("Header value: %r" % header)
print("email.header.decode_header(...) -> %r" %
email.header.decode_header(header))
print("decode_header_to_string(...) -> %r" %
decode_header_to_string(header))
print("-------")
Outputs:
Header value: '=?utf-8?B?ZsOzbw=='
email.header.decode_header(...) -> [('=?utf-8?B?ZsOzbw==', None)]
decode_header_to_string(...) -> '=?utf-8?B?ZsOzbw=='
-------
Header value: '=?ascii?Q?hello?==?utf-8?B?ZsOzbw==?='
email.header.decode_header(...) -> [(b'hello', 'ascii'), (b'f\xc3\xb3o',
'utf-8')]
decode_header_to_string(...) -> 'hellofóo'
-------
Header value: 'bar=?ascii?Q?hello?==?utf-8?B?ZsOzbw==?='
email.header.decode_header(...) -> [(b'bar', None), (b'hello', 'ascii'),
(b'f\xc3\xb3o', 'utf-8')]
decode_header_to_string(...) -> 'barhellofóo'
-------
Header value: 'plain string'
email.header.decode_header(...) -> [('plain string', None)]
decode_header_to_string(...) -> 'plain string'
-------
Header value: 'foo=?blah?Q??='
email.header.decode_header(...) -> [(b'foo', None), (b'', 'blah')]
decode_header_to_string(...) -> 'foo'
-------
----------
nosy: +dlenski
_______________________________________
Python tracker <[email protected]>
<https://bugs.python.org/issue22833>
_______________________________________
_______________________________________________
Python-bugs-list mailing list
Unsubscribe:
https://mail.python.org/mailman/options/python-bugs-list/archive%40mail-archive.com