Selaa lähdekoodia

wxGUI: fix encoding strings
(merge https://trac.osgeo.org/grass/changeset/47368 from relbr64)


git-svn-id: https://svn.osgeo.org/grass/grass/trunk@47370 15284696-431f-4ddb-bdfa-cd5b030d7da7

Martin Landa 13 vuotta sitten
vanhempi
commit
f8db9a0e74

+ 1 - 1
gui/wxpython/gui_modules/gcmd.py

@@ -607,7 +607,7 @@ def RunCommand(prog, flags = "", overwrite = False, quiet = False, verbose = Fal
         ps.stdin = None
     
     Debug.msg(3, "gcmd.RunCommand(): decoding string")
-    stdout, stderr = map(lambda x: utils.DecodeString(x) if type(x) is types.StringType else x, ps.communicate())
+    stdout, stderr = map(utils.DecodeString, ps.communicate())
     
     ret = ps.returncode
     Debug.msg(1, "gcmd.RunCommand(): get return code %d" % ret)

+ 9 - 8
gui/wxpython/gui_modules/goutput.py

@@ -26,6 +26,7 @@ import time
 import threading
 import Queue
 import codecs
+import locale
 
 import wx
 import wx.stc
@@ -358,20 +359,20 @@ class GMConsole(wx.SplitterWindow):
     
     def Redirect(self):
         """!Redirect stdout/stderr
-        
-        @return True redirected
-        @return False failed
         """
         if Debug.GetLevel() == 0 and int(grass.gisenv().get('DEBUG', 0)) == 0:
             # don't redirect when debugging is enabled
             sys.stdout = self.cmd_stdout
             sys.stderr = self.cmd_stderr
-            return True
         else:
-            sys.stdout = sys.__stdout__
-            sys.stderr = sys.__stderr__
-        return False
-
+            enc = locale.getdefaultlocale()[1]
+            if enc:
+                sys.stdout = codecs.getwriter(enc)(sys.__stdout__)
+                sys.stderr = codecs.getwriter(enc)(sys.__stderr__)
+            else:
+                sys.stdout = sys.__stdout__
+                sys.stderr = sys.__stderr__
+        
     def WriteLog(self, text, style = None, wrap = None,
                  switchPage = False):
         """!Generic method for writing log message in 

+ 19 - 18
gui/wxpython/gui_modules/utils.py

@@ -291,14 +291,14 @@ def GetVectorNumberOfLayers(parent, vector):
         Debug.msg(5, "utils.GetVectorNumberOfLayers(): vector map '%s' not found" % vector)
         return layers
     
-    ret = gcmd.RunCommand('v.db.connect',
-                          parent = parent,
-                          flags = 'g',
-                          read = True,
-                          map = fullname,
-                          fs = ';')
-        
-    if not ret:
+    ret, out, msg = gcmd.RunCommand('v.db.connect',
+                                    getErrorMsg = True,
+                                    read = True,
+                                    flags = 'g',
+                                    map = fullname,
+                                    fs = ';')
+    if ret != 0:
+        sys.stderr.write(_("Vector map <%s>: %s\n") % (fullname, msg))
         return layers
     else:
         Debug.msg(1, "GetVectorNumberOfLayers(): ret %s" % ret)
@@ -651,21 +651,19 @@ def GetColorTables():
     return ret.splitlines()
 
 def DecodeString(string):
-    """!Return decoded string
+    """!Decode string using system encoding
     
-    String is decoded as unicode, on failure
-    are used system locales.
-
     @param string string to be decoded
     
     @return decoded string
     """
-    try:
-        return string.decode('utf-8')
-    except LookupError:
-        enc = locale.getdefaultlocale()[1]
-        if enc:
-            return string.decode(enc)
+    if not string:
+        return string
+    
+    enc = locale.getdefaultlocale()[1]
+    if enc:
+        Debug.msg(5, "DecodeString(): enc=%s" % enc)
+        return string.decode(enc)
     
     return string
 
@@ -676,8 +674,11 @@ def EncodeString(string):
     
     @return encoded string
     """
+    if not string:
+        return string
     enc = locale.getdefaultlocale()[1]
     if enc:
+        Debug.msg(5, "EncodeString(): enc=%s" % enc)
         return string.encode(enc)
     
     return string