File: pyedit-products/unzipped/PP4E/Internet/Email/mailtools/_test-decoding.py
fetchEncoding = 'utf8' # 'latin1' works for msg2 def decodeToUnicode(messageBytes): text = None kinds = [fetchEncoding] # try user setting first ########kinds += ['ascii', 'latin1', 'utf8'] # then try common types? for kind in kinds: # may cause mail saves to fail try: text = [line.decode(kind) for line in messageBytes] break except UnicodeDecodeError: pass if not text: # try returning headers + error msg, else except may kill client; # still try to decode headers per ascii, other, platform default; blankline = messageBytes.index(b'') hdrsonly = messageBytes[:blankline] commons = ['ascii', 'latin1', 'utf8'] for common in commons: try: text = [line.decode(common) for line in hdrsonly] break except UnicodeDecodeError: pass else: # none worked try: text = [line.decode() for line in hdrsonly] # platform dflt? except UnicodeDecodeError: text = ['From: (sender of unknown Unicode format headers)'] text += ['', '--Sorry: mailtools cannot decode this mail content!--'] return text msg1 = [b'xxx', b'yyy', b'zzz', b'', b'mmm', b'nnn'] msg2 = [b'xxx', b'yyy', b'zzz', b'', b'm\xe4m', b'nnn'] msg3 = [b'xxx', b'yyy', b'zzz', b'', b'm\xFFm', b'nnn'] print('\n'.join(decodeToUnicode(msg1))) print('-'*75) print('\n'.join(decodeToUnicode(msg2))) print('-'*75) print('\n'.join(decodeToUnicode(msg3)))