[Erp5-report] r24281 - /erp5/trunk/products/ERP5/Document/EmailDocument.py

nobody at svn.erp5.org nobody at svn.erp5.org
Wed Oct 22 10:53:28 CEST 2008


Author: nicolas
Date: Wed Oct 22 10:53:26 2008
New Revision: 24281

URL: http://svn.erp5.org?rev=24281&view=rev
Log:
Add naïve loop to guess which encoding is used when email indicate wrong encoding

Modified:
    erp5/trunk/products/ERP5/Document/EmailDocument.py

Modified: erp5/trunk/products/ERP5/Document/EmailDocument.py
URL: http://svn.erp5.org/erp5/trunk/products/ERP5/Document/EmailDocument.py?rev=24281&r1=24280&r2=24281&view=diff
==============================================================================
--- erp5/trunk/products/ERP5/Document/EmailDocument.py (original)
+++ erp5/trunk/products/ERP5/Document/EmailDocument.py Wed Oct 22 10:53:26 2008
@@ -129,7 +129,11 @@
     for (name, value) in self._getMessage().items():
       for text, encoding in decode_header(value):
         if encoding is not None:
-          text = text.decode(encoding).encode('utf-8')
+          try:
+            text = text.decode(encoding).encode('utf-8')
+          except UnicodeDecodeError:
+            encoding = self._guessEncoding(text)
+            text = text.decode(encoding).encode('utf-8')
         if name in result:
           result[name] = '%s %s' % (result[name], text)
         else:
@@ -596,6 +600,20 @@
     """
     self.MailHost.send(message)
 
+  def _guessEncoding(self, string):
+    """
+    Some Email Clients indicate wrong encoding
+    This method try to guess which encoding is used.
+    """
+    from encodings.aliases import aliases
+    codec_list = set(aliases.values())
+    for codec in codec_list:
+      try:
+        string.decode(codec)
+      except (UnicodeDecodeError, IOError):
+        continue
+      return codec
+
 ## Compatibility layer
 #from Products.ERP5Type import Document
 #Document.MailMessage = EmailDocument




More information about the Erp5-report mailing list