Changeset 112

Show
Ignore:
Timestamp:
03/25/06 22:18:03 (18 years ago)
Author:
jerome
Message:

Now receives and sends back UTF-8 encoded text (when the text comes
from user input)

Files:
1 modified

Legend:

Unmodified
Added
Removed
  • pykoticon/trunk/bin/pykoticon

    r111 r112  
    112112        for (k, v) in varvalues.items() : 
    113113            values[k] = v.data 
    114         wx.CallAfter(self.frame.askDatas, [ v.data for v in labels ], \ 
     114        wx.CallAfter(self.frame.askDatas, [ self.frame.UTF8ToUserCharset(v.data) for v in labels ], \ 
    115115                                          varnames, \ 
    116                                           values) 
     116                                          [ self.frame.UTF8ToUserCharset(v.data) for v in values]) 
    117117        # ugly, isn't it ? 
    118118        while self.frame.dialogAnswer is None : 
     
    121121        for (k, v) in retcode.items() : 
    122122            if k != "isValid" : 
    123                 retcode[k] = xmlrpclib.Binary(v) 
     123                retcode[k] = xmlrpclib.Binary(self.frame.userCharsetToUTF8(v)) 
    124124        self.frame.dialogAnswer = None # prepare for next call, just in case 
    125125        return retcode 
     
    127127    def export_showDialog(self, message, yesno) : 
    128128        """Opens a notification or confirmation dialog.""" 
    129         wx.CallAfter(self.frame.showDialog, message.data, yesno) 
     129        wx.CallAfter(self.frame.showDialog, self.frame.UTF8ToUserCharset(message.data), yesno) 
    130130        # ugly, isn't it ? 
    131131        while self.frame.dialogAnswer is None : 
     
    333333            pass 
    334334         
    335     def postInit(self, printserver, localport) :     
     335    def postInit(self, charset, printserver, localport) :     
    336336        """Starts the XML-RPC server.""" 
    337337        self.quitEvent = threading.Event() 
     338        self.charset = charset 
    338339        self.port = localport 
    339340        self.server = MyXMLRPCServer(self, printserver, localport) 
    340      
     341         
     342    def UTF8ToUserCharset(self, text) : 
     343        """Converts from UTF-8 to user's charset.""" 
     344        if text is not None : 
     345            try : 
     346                return unicode(text, "UTF-8").encode(self.charset)  
     347            except UnicodeError :     
     348                try : 
     349                    # Incorrect locale settings ? 
     350                    return unicode(text, "UTF-8").encode("ISO-8859-15")  
     351                except UnicodeError :     
     352                    pass 
     353        return text 
     354         
     355    def userCharsetToUTF8(self, text) : 
     356        """Converts from user's charset to UTF-8.""" 
     357        if text is not None : 
     358            try : 
     359                return unicode(text, self.charset).encode("UTF-8")  
     360            except UnicodeError :     
     361                try : 
     362                    # Incorrect locale settings ? 
     363                    return unicode(text, "ISO-8859-15").encode("UTF-8")  
     364                except UnicodeError :     
     365                    pass 
     366        return text 
    341367 
    342368class PyKotIconApp(wx.App): 
     
    347373        return True 
    348374         
    349     def postInit(self, printserver, localport) :     
     375    def postInit(self, charset, printserver, localport) :     
    350376        """Continues processing.""" 
    351         self.frame.postInit(printserver, localport) 
     377        self.frame.postInit(charset, printserver, localport) 
    352378         
    353379def main(printserver, localport): 
     
    361387    except : 
    362388        gettext.NullTranslations().install() 
     389         
     390    localecharset = None 
     391    try : 
     392        try : 
     393            localecharset = locale.nl_langinfo(locale.CODESET) 
     394        except AttributeError :     
     395            try : 
     396                localecharset = locale.getpreferredencoding() 
     397            except AttributeError :     
     398                try : 
     399                    localecharset = locale.getlocale()[1] 
     400                    localecharset = localecharset or locale.getdefaultlocale()[1] 
     401                except ValueError :     
     402                    pass        # Unknown locale, strange... 
     403    except locale.Error :             
     404        pass 
     405    charset = os.environ.get("CHARSET") or localecharset or "ISO-8859-15" 
     406     
    363407    app = PyKotIconApp() 
    364408    try : 
     
    366410    except (TypeError, ValueError) :     
    367411        raise ValueError, "Invalid TCP port parameter %s\n" % localport 
    368     app.postInit(printserver, localport) 
     412    app.postInit(charset, printserver, localport) 
    369413    app.MainLoop() 
    370414