writing an email.message.Message in UTF-8
dieter
dieter at handshake.de
Tue Dec 8 02:50:07 EST 2015
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.
More information about the Python-list
mailing list