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. -- https://mail.python.org/mailman/listinfo/python-list