[GRASS-dev] [GRASS GIS] #2050: After GRASS started xml.etree.ElementTree raises ParseError when clicking any GUI element on Win 7 Simplified Chinese

GRASS GIS trac at osgeo.org
Mon Jul 29 09:15:51 PDT 2013


#2050: After GRASS started xml.etree.ElementTree raises ParseError when clicking
any GUI element  on Win 7 Simplified Chinese
----------------------------------------------+-----------------------------
 Reporter:  lazywalking                       |       Owner:  grass-dev@…              
     Type:  defect                            |      Status:  new                      
 Priority:  major                             |   Milestone:  6.4.3                    
Component:  wxGUI                             |     Version:  unspecified              
 Keywords:  chinese,windows 7, gui, encoding  |    Platform:  MSWindows 7              
      Cpu:  Unspecified                       |  
----------------------------------------------+-----------------------------
 I'm using Win7 Simplified Chinese, with GRASS 6.4.3RC4 installed. After
 GRASS started successfully, it raises  ParseError in xml.etree.ElementTree
 module when I click any tool or menu in Layer Manager window. For Example,
 if I click "Add vector map layer" tool, error messages below will display
 in Command Console, and d.vect setting window can't open.

 ----
 ''Traceback (most recent call last):
   File "d:\GRASS\etc\wxpython\lmgr\frame.py", line 1563, in
 OnAddVector

 self.curr_page.maptree.AddLayer('vector')
   File "d:\GRASS\etc\wxpython\lmgr\layertree.py", line 924,
 in AddLayer

 self.PropertiesDialog(layer, show = True)
   File "d:\GRASS\etc\wxpython\lmgr\layertree.py", line 1036,
 in PropertiesDialog

 completed = (self.GetOptData,layer,params))
   File "d:\GRASS\etc\wxpython\gui_core\forms.py", line 1871,
 in ParseCommand

 blackList = _blackList)
   File "d:\GRASS\etc\python\grass\script\task.py", line 470,
 in parse_interface

 tree = etree.fromstring(get_interface_description(name))
   File "d:\GRASS\Python27\lib\xml\etree\ElementTree.py",
 line 1300, in XML

 parser.feed(text)
   File "d:\GRASS\Python27\lib\xml\etree\ElementTree.py",
 line 1642, in feed

 self._raiseerror(v)
   File "d:\GRASS\Python27\lib\xml\etree\ElementTree.py",
 line 1506, in _raiseerror

 raise err
 xml.etree.ElementTree
 .
 ParseError
 :
 unknown encoding: line 1, column 30''
 ----

 Finally I find that the bug is in task.py file with lines 460-470.

 {{{
     enc = locale.getdefaultlocale()[1]
     if enc and enc.lower() == 'cp932':
         p = re.compile('encoding="' + enc + '"', re.IGNORECASE)
         tree = etree.fromstring(p.sub('encoding="utf-8"',
 get_interface_description(name).decode(enc).encode("utf-8")))
     else:
        tree = etree.fromstring(get_interface_description(name))
 }}}

 On my PC, enc is 'cp936', but the encoding of string returned by
 get_interface_description(name) is 'gbk'. I replace first two sentences
 with

 {{{
     enc = locale.encodings.aliases.aliases[locale.getdefaultlocale()[1]]
     if enc and enc.lower() != 'utf-8':
 }}}
 .
 It works fine on my PC. But I don't know whether it succeeds in other
 conditions.

-- 
Ticket URL: <http://trac.osgeo.org/grass/ticket/2050>
GRASS GIS <http://grass.osgeo.org>



More information about the grass-dev mailing list