writing an email.message.Message in UTF-8

Adam Funk a24061 at ducksburg.com
Tue Dec 8 04:35:06 EST 2015


On 2015-12-08, dieter wrote:

> Adam Funk <a24061 at ducksburg.com> writes:
>
>> I'm trying to write an instance of email.message.Message, whose body
>> contains unicode characters, to a UTF-8 file.  (Python 2.7.3 & 2.7.10
>> again.)
>>
>>     reply = email.message.Message()
>>     reply.set_charset('utf-8')
>>     ... # set various headers
>>     reply.set_payload('\n'.join(body_lines) + '\n')
>>     ...
>>     outfile = codecs.open(outfilename, 'w', encoding='utf-8', errors='ignore')
>>     outfile.write(reply.as_string())
>>     outfile.close()
>>
>> Then reply.as_string() barfs a UnicodeDecodeError.  I look in the
>> documentation, which says the generator is better.  So I replace the
>> outfile.write(...) line with the following:
>>
>>     g = email.generator.Generator(outfile, mangle_from_=False)
>>     g.flatten(reply)
>>
>> which still barfs a UnicodeDecodeError.  Looking closer at the first
>> error, I see that the exception was in g.flatten(...) already & thrown
>> up to reply.as_string().  How can I force the thing to do UTF-8
>> output?
>
> You could try replacing "reply.set_payload('\n'.join(body_lines) + '\n')"
> by "reply.set_payload(('\n'.join(body_lines) + '\n').encode('utf-8'))",
> i.e. you would not pass in a unicode payload but an "utf-8" encode
> "str" payload.

That didn't work (I got the same error) but switching to python 3.2
did.  Thanks, though.


-- 
A mathematical formula should never be "owned" by anybody! Mathematics
belonga to God.                                       --- Donald Knuth



More information about the Python-list mailing list