Jump to content
Sign in to follow this  
dabear

unicodefeil i xchatscript

Recommended Posts

Heisann, holder på å lage meg noen python-xchat scripts, men har kommet over en unicodefeil som jeg ikke får vekk. Stringen må være i unicode, ettersom jeg bruker googleapien. søkestrengen blir henta fra msg.strip().split(' ')[1:].

 

 

 try:
       asks = ''.join([x for x in msg.strip().split(' ')[1:]])
       query = unicode(asks, 'latin-1')
   except Exception, e:
       channelWrite('google search kommando uten en søkestring detektert!')
       print 'Feil skjedde:\n\n%s\nqueryet: %s\n' % (e, asks)
   else:    
       import SOAPpy as SOAP
      #...

koden funker, men jeg får denne feilen om søkestrengen inneholder æ,ø eller å. Hvordan skal jeg fikse dette?

google search kommando uten en søkestring detektert!

Feil skjedde:

 

'ascii' codec can't decode byte 0xc3 in position 2: ordinal not in range(128)

queryet: ssæ

Edited by dabear

Share this post


Link to post

Heisann, ingen som kan hjelpe? Det viser seg at det er konverteringa til utf-8 som er problemet.

asks = ' '.join([x for x in msg.strip().split(' ')[1:]]).encode('utf-8')

Dersom msg inneholder ø,æ eller å, får jeg altså feilen «'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)

queryet»

Share this post


Link to post

Sliter veldig mykje med det same.

SOAPpy har ein klasse som heiter Types.py, i return til

def _marshalData(self)

return str(self._data)

 

viss du setter det til unicode istandefor str så skal den takle det bedre.

problemet for meg er at den omsetter ein norsk Å til to andre tegn og soap-kallet går i dass likevel.

Share this post


Link to post

Heisann, løste det på følgende måte:

def google(msg):

   asks  = ''

   query = ''

   msg = msg.decode('utf-8')

   try:

       asks = u' '.join([x for x in msg.strip().split(' ')[1:]] )

       query = asks

   except Exception, e:

       channelWrite('google search kommando uten en søkestring detektert!')

       print 'Feil skjedde:\n\n%s\nqueryet: %s\n' % (e, asks)

   else:    

       import SOAPpy as SOAP

       #-t-o-d-o-: detect define: & similar = no url & throws exception

       google = SOAP.SOAPProxy('http://api.google.com/search/beta2', namespace='urn:GoogleSearch')

       #this one is mine, please change..

       googleKey = u'KJcb8flQFHKQ9R12mI0KLJSYkb6vk1i5'

       try:

           results = google.doGoogleSearch(googleKey, query, 0, 10,\

           SOAP.booleanType(0), u'', SOAP.booleanType(0), u'', u'', u'')

       except:

           #couldn't do query

           channelWrite('Kunne ikke gjennomføre googlesøk, prøv igjen seinere')

           return
       try:    

           totalResults = str(results.estimatedTotalResultsCount)

           time        = results.searchTime

           firstURL    = results.resultElements[0].URL 

           # print first result and number of matches

           reply = u'Googlesøket etter %s ga %s resutat. Første link er %s' % (query,

                                                                        totalResults, firstURL)

       except:
           reply = u'Kunne ikke søke etter %s, ikke et gyldig søk' % query
       reply = reply.encode("utf-8")

       channelWrite(reply)

Share this post


Link to post

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...