Hi,

PFA patch to fix the issue where if the database server is installed on the
windows system then in most cases the parameter 'lc_messages' has
environment dependent encoding.
RM#2806
RM#2821

--
Regards,
Murtuza Zabuawala
EnterpriseDB: http://www.enterprisedb.com
The Enterprise PostgreSQL Company
diff --git a/web/pgadmin/utils/driver/psycopg2/__init__.py 
b/web/pgadmin/utils/driver/psycopg2/__init__.py
index 48a7c93..ece1d12 100644
--- a/web/pgadmin/utils/driver/psycopg2/__init__.py
+++ b/web/pgadmin/utils/driver/psycopg2/__init__.py
@@ -1589,11 +1589,29 @@ Failed to reset the connection to the server due to 
following error:
         Returns:
             Decoded string
         """
+        is_error = False
         if hasattr(str, 'decode'):
             try:
                 value = value.decode('utf-8')
+            except UnicodeDecodeError:
+                # Let's try with python's preferred encoding
+                # On Windows lc_messages mostly has environment dependent
+                # encoding like 'French_France.1252'
+                try:
+                    import locale
+                    pref_encoding = locale.getpreferredencoding()
+                    value = value.decode(pref_encoding)\
+                        .encode('utf-8')\
+                        .decode('utf-8')
+                except:
+                    is_error = True
             except:
-                pass
+                is_error = True
+
+        # If still not able to decode then
+        if is_error:
+            value = value.decode('ascii', 'ignore')
+
         return value
 
     def _formatted_exception_msg(self, exception_obj, formatted_msg):

Reply via email to