From fe7cfa35df3b5244ecf493c378bdc1a68d7a4ce1 Mon Sep 17 00:00:00 2001 From: Murtuza Zabuawala Date: Mon, 27 Nov 2017 11:53:25 +0000 Subject: [PATCH] Attempt to decode database errors based on lc_messages. Fixes #2806. Fixes #2821 --- web/pgadmin/utils/driver/psycopg2/__init__.py | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/web/pgadmin/utils/driver/psycopg2/__init__.py b/web/pgadmin/utils/driver/psycopg2/__init__.py index 48a7c935d..ece1d1260 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):