On 2015-12-08, dieter wrote: > Adam Funk <a24...@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 -- https://mail.python.org/mailman/listinfo/python-list