Browse Source

wxGUI: add GetDefaultEncoding
fix writing workspace and model file


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

Martin Landa 12 years ago
parent
commit
eaef528903

+ 22 - 12
gui/wxpython/core/gcmd.py

@@ -14,6 +14,7 @@ Classes:
 
 Functions:
  - RunCommand
+ - GetDefaultEncoding
 
 (C) 2007-2008, 2010-2011 by the GRASS Development Team
 
@@ -29,8 +30,8 @@ import sys
 import time
 import errno
 import signal
-import locale
 import traceback
+import locale
 import subprocess
 if subprocess.mswindows:
     from win32file import ReadFile, WriteFile
@@ -67,13 +68,8 @@ def DecodeString(string):
     """
     if not string:
         return string
-
-    try:
-        enc = locale.getdefaultlocale()[1]
-    except ValueError, e:
-        sys.stderr.write(_("ERROR: %s\n") % str(e))
-        return string
     
+    enc = GetDefaultEncoding()
     if enc:
         Debug.msg(5, "DecodeString(): enc=%s" % enc)
         return string.decode(enc)
@@ -89,7 +85,8 @@ def EncodeString(string):
     """
     if not string:
         return string
-    enc = locale.getdefaultlocale()[1]
+    
+    enc = GetDefaultEncoding()
     if enc:
         Debug.msg(5, "EncodeString(): enc=%s" % enc)
         return string.encode(enc)
@@ -467,14 +464,13 @@ class Command:
         """!Get error message or ''"""
         if not self.cmdThread.module:
             return _("Unable to exectute command: '%s'") % ' '.join(self.cmd)
-
+        
         for type, msg in self.__ProcessStdErr():
             if type == 'ERROR':
-                enc = locale.getdefaultlocale()[1]
+                enc = GetDefaultEncoding()
                 if enc:
                     return unicode(msg, enc)
-                else:
-                    return msg
+                return msg
         
         return ''
     
@@ -704,3 +700,17 @@ def RunCommand(prog, flags = "", overwrite = False, quiet = False, verbose = Fal
     
     Debug.msg(2, "gcmd.RunCommand(): return result")
     return stdout, _formatMsg(stderr)
+
+def GetDefaultEncoding(forceUTF8 = False):
+    """!Get default system encoding
+    
+    @param forceUTF8 return UTF8 when encoding is not defined
+
+    @return system encoding (can be None)
+    """
+    enc = locale.getdefaultlocale()[1]
+    if forceUTF8 and (enc is None or enc != 'UTF8'):
+        return 'UTF-8'
+    
+    Debug.msg(1, "GetSystemEncoding(): %s" % enc)
+    return enc

+ 1 - 1
gui/wxpython/core/utils.py

@@ -3,7 +3,7 @@
 
 @brief Misc utilities for wxGUI
 
-(C) 2007-2009, 2011 by the GRASS Development Team
+(C) 2007-2009, 2011-2012 by the GRASS Development Team
 
 This program is free software under the GNU General Public License
 (>=v2). Read the file COPYING that comes with GRASS for details.

+ 3 - 4
gui/wxpython/core/workspace.py

@@ -17,13 +17,12 @@ This program is free software under the GNU General Public License
 """
 
 import os
-import locale
 
 import wx
 
 from core.utils     import normalize_whitespace
 from core.settings  import UserSettings
-from core.gcmd      import EncodeString
+from core.gcmd      import EncodeString, GetDefaultEncoding
 from nviz.main      import NvizSettings
 
 class ProcessWorkspaceFile:
@@ -562,8 +561,8 @@ class WriteWorkspaceFile(object):
         self.indent = 0
         
         # write header
-        enc = locale.getdefaultlocale()[1]
-        self.file.write('<?xml version="1.0" encoding="%s"?>\n' % enc)
+
+        self.file.write('<?xml version="1.0" encoding="%s"?>\n' % GetDefaultEncoding(forceUTF8 = True))
         self.file.write('<!DOCTYPE gxw SYSTEM "grass-gxw.dtd">\n')
         self.file.write('%s<gxw>\n' % (' ' * self.indent))
         

+ 2 - 4
gui/wxpython/gmodeler/model.py

@@ -31,7 +31,6 @@ import copy
 import re
 import mimetypes
 import time
-import locale
 try:
     import xml.etree.ElementTree as etree
 except ImportError:
@@ -42,7 +41,7 @@ from wx.lib import ogl
 
 from core                import globalvar
 from core                import utils
-from core.gcmd           import GMessage, GException, GError, RunCommand, EncodeString, GWarning
+from core.gcmd           import GMessage, GException, GError, RunCommand, EncodeString, GWarning, GetDefaultEncoding
 from core.settings       import UserSettings
 from gui_core.forms      import GUI, CmdPanel
 from gui_core.widgets    import GNotebook
@@ -1779,8 +1778,7 @@ class WriteModelFile:
         
     def _header(self):
         """!Write header"""
-        enc = locale.getdefaultlocale()[1]
-        self.fd.write('<?xml version="1.0" encoding="%s"?>\n' % enc)
+        self.fd.write('<?xml version="1.0" encoding="%s"?>\n' % GetDefaultEncoding(forceUTF8 = True))
         self.fd.write('<!DOCTYPE gxm SYSTEM "grass-gxm.dtd">\n')
         self.fd.write('%s<gxm>\n' % (' ' * self.indent))
         self.indent += 4