[Tutor] Unicode

Lloyd Kvam pythontutor at venix.com
Tue Sep 23 13:28:16 EDT 2003


If I read your code correctly, the \xf8 is coming from the spreadsheet
when you execute this line:

         definisjoner.bransje =
definisjoner.xlSheet.Cells(definisjoner.xlrad, definisjoner.xlkolonne).Value

I think you can fix this by using urllib.quote on the URL string.

import urllib
....
definisjoner.res4 = urllib.urlopen(urllib.quote(definisjoner.level4))

I hope it will do the right thing given a line that is already partially
quoted.  Otherwise:
definisjoner.bransje = urllibquote(definisjoner.bransje) should help.

Øyvind Dale Spørck wrote:

> Hello,
> 
>    I have been making a little program that goes onto the net and picks down
> some information. The program has to put some adresses together to find the
> adress that it is going to look for. It works great if I use only english
> letters. However, I need to use a few non-english letters,  æøå. Python
> seems to change the adress to unicode, even thought I make sure that all the
> variables are in string format. 
> 
>    In the error the letter ø gets translated into \xf8. The correct adress
> is
> http://www.kvasir.no/cgi-bin/search.cgi?what=bransje&q=agreement.level%3A204
> +S%F8keord&loc= where the ø gets translated into %F8. How can I get the
> program to translate the ø to %F8 and to run the adress without the Unicode
> error?
> 
> Thanks in advance,
> Øyvind
> 
> 
> The error:
> 
> Traceback (most recent call last):
>   File
> "C:\Python22\Lib\site-packages\Pythonwin\pywin\framework\scriptutils.py",
> line 301, in RunScript
>     exec codeObject in __main__.__dict__
>   File "C:\Documents and Settings\oyvind.sporck\My
> Documents\Python\agreement_level_excel4.py", line 147, in ?
>     n.lastned()
>   File "C:\Documents and Settings\oyvind.sporck\My
> Documents\Python\agreement_level_excel4.py", line 55, in lastned
>     definisjoner.res4 = urlopen(definisjoner.level4)
>   File "C:\Python22\lib\urllib.py", line 73, in urlopen
>     return _urlopener.open(url)
>   File "C:\Python22\lib\urllib.py", line 151, in open
>     fullurl = unwrap(toBytes(fullurl))
>   File "C:\Python22\lib\urllib.py", line 913, in toBytes
>     raise UnicodeError("URL " + repr(url) +
> UnicodeError: URL
> u'http://www.kvasir.no/cgi-bin/search.cgi?what=bransje&q=agreement.level%3A2
> 04+S\xf8keord&loc=&Submit=S%F8k' contains non-ASCII characters
> 
> The program:
> 
> from win32com.client import Dispatch
> from urllib import urlopen
> import re
> from sys import exit
> 
> class definisjoner:
>     xlApp = Dispatch("Excel.Application")
>     xlApp.visible = 1
>     xlApp.Workbooks.Open(Filename='C:\\Documents and
> Settings\oyvind.sporck\My Documents\Agreementliste.xls')
>     xlBook = xlApp.Workbooks(1)
>     xlSheet = xlApp.Sheets(1)
>     level4 =''
>     level5 =''
>     level6 =''
>     level7 =''
>     level8 =''
>     res4 = ''
>     res5 = ''
>     res6 = ''
>     res7 = ''
>     res8 = ''
>     bransje = ''
>     forst =
> "http://www.kvasir.no/cgi-bin/search.cgi?what=bransje&q=agreement.level%3A"
>     midten = "+"
>     slutten = "&loc=&Submit=S%F8k"
>     linje_standard = ''
>     linje_pluss = ''
>     linje_bilde = ''
>     linje_slide = ''
>     linje_slidepluss = ''
>     xlrad = 2
>     xlkolonne = 1
> 
>     def __init__(self):
>         pass
> 
>     def spor(self):
>         definisjoner.bransje =
> definisjoner.xlSheet.Cells(definisjoner.xlrad, definisjoner.xlkolonne).Value
>         print(type(definisjoner.bransje))
>         print definisjoner.bransje
>         print definisjoner.bransje
>         #definisjoner.bransje = str(definisjoner.bransje)
>         print definisjoner.bransje
>         definisjoner.bransje
>         if definisjoner.bransje == '':
>             sys.exit()
>         definisjoner.level4 = definisjoner.forst + "204" +
> definisjoner.midten + definisjoner.bransje + definisjoner.slutten
>         definisjoner.level5 = definisjoner.forst + "205" +
> definisjoner.midten + definisjoner.bransje + definisjoner.slutten
>         definisjoner.level6 = definisjoner.forst + "206" +
> definisjoner.midten + definisjoner.bransje + definisjoner.slutten
>         definisjoner.level7 = definisjoner.forst + "207" +
> definisjoner.midten + definisjoner.bransje + definisjoner.slutten
>         definisjoner.level8 = definisjoner.forst + "208" +
> definisjoner.midten + definisjoner.bransje + definisjoner.slutten
>         print definisjoner.bransje
> 
>     def lastned(self):    
>         definisjoner.res4 = urlopen(definisjoner.level4)
>         definisjoner.res5 = urlopen(definisjoner.level5)
>         definisjoner.res6 = urlopen(definisjoner.level6)
>         definisjoner.res7 = urlopen(definisjoner.level7)
>         definisjoner.res8 = urlopen(definisjoner.level8)
> 
>     def finn(self):
>         i = 1
>         print "Bransje"
>         print definisjoner.bransje
>         while definisjoner.res4.readline() != '<TD BGCOLOR="#DDDDDD"><FONT
> SIZE=2 face="Verdana,Arial,Geneva">\n':
>             i = i + 1
>             if i > 1000:
>                 break
>         m = definisjoner.res4.readline()
>         print m
>         definisjoner.linje_standard = re.search('(?<=<b>)[0-9][0-9][0-9]',
> m) or re.search('(?<=<b>)[0-9][0-9]', m) or re.search('(?<=<b>)[0-9]', m)
>         i = 1
>         while definisjoner.res5.readline() != '<TD BGCOLOR="#DDDDDD"><FONT
> SIZE=2 face="Verdana,Arial,Geneva">\n':
>             i = i + 1
>             if i > 1000:
>                 break
>         m = definisjoner.res5.readline()
>         print m
>         definisjoner.linje_pluss = re.search('(?<=<b>)[0-9][0-9][0-9]', m)
> or re.search('(?<=<b>)[0-9][0-9]', m) or re.search('(?<=<b>)[0-9]', m)
>         i = 1
>         while definisjoner.res6.readline() != '<TD BGCOLOR="#DDDDDD"><FONT
> SIZE=2 face="Verdana,Arial,Geneva">\n':
>             i = i + 1
>             if i > 1000:
>                 break
>         m = definisjoner.res6.readline()
>         print m
>         definisjoner.linje_bilde = re.search('(?<=<b>)[0-9][0-9][0-9]', m)
> or re.search('(?<=<b>)[0-9][0-9]', m) or re.search('(?<=<b>)[0-9]', m)
>         i = 1
>         while definisjoner.res7.readline() != '<TD BGCOLOR="#DDDDDD"><FONT
> SIZE=2 face="Verdana,Arial,Geneva">\n':
>             i = i + 1
>             if i > 1000:
>                 break
>         m = definisjoner.res7.readline()
>         print m
>         definisjoner.linje_slide = re.search('(?<=<b>)[0-9][0-9][0-9]', m)
> or re.search('(?<=<b>)[0-9][0-9]', m) or re.search('(?<=<b>)[0-9]', m)
>         i = 1
>         while definisjoner.res8.readline() != '<TD BGCOLOR="#DDDDDD"><FONT
> SIZE=2 face="Verdana,Arial,Geneva">\n':
>             i = i + 1
>             if i > 1000:
>                 break
>         m = definisjoner.res8.readline()
>         print m
>         definisjoner.linje_slidepluss = re.search('(?<=<b>)[0-9][0-9][0-9]',
> m) or re.search('(?<=<b>)[0-9][0-9]', m) or re.search('(?<=<b>)[0-9]', m)
> 
>     def plukkut(self):
>         if definisjoner.linje_standard == None:
>             definisjoner.linje_standard = 0
>         else:
>             definisjoner.linje_standard =
> int(definisjoner.linje_standard.group())
>         if definisjoner.linje_pluss == None:
>             definisjoner.linje_pluss = 0
>         else:
>             definisjoner.linje_pluss = int(definisjoner.linje_pluss.group())
>         if definisjoner.linje_bilde == None:
>             definisjoner.linje_bilde = 0
>         else:
>             definisjoner.linje_bilde = int(definisjoner.linje_bilde.group())
>         if definisjoner.linje_slide == None:
>             definisjoner.linje_slide == 0
>         else:
>             definisjoner.linje_slide = int(definisjoner.linje_slide.group())
>         if definisjoner.linje_slidepluss == None:
>             definisjoner.linje_slidepluss == 0
>         else:
>             definisjoner.linje_slidepluss =
> int(definisjoner.linje_slidepluss.group())
> 
> 
>     def settinn(self):
>         
>         definisjoner.xlkolonne = definisjoner.xlkolonne + 1
>         definisjoner.xlSheet.Cells(definisjoner.xlrad,
> definisjoner.xlkolonne).Value = definisjoner.linje_standard
>         definisjoner.xlkolonne = definisjoner.xlkolonne + 1
>         definisjoner.xlSheet.Cells(definisjoner.xlrad,
> definisjoner.xlkolonne).Value = definisjoner.linje_pluss
>         definisjoner.xlkolonne = definisjoner.xlkolonne + 1
>         definisjoner.xlSheet.Cells(definisjoner.xlrad,
> definisjoner.xlkolonne).Value = definisjoner.linje_bilde
>         definisjoner.xlkolonne = definisjoner.xlkolonne + 1
>         definisjoner.xlSheet.Cells(definisjoner.xlrad,
> definisjoner.xlkolonne).Value = definisjoner.linje_slide
>         definisjoner.xlkolonne = definisjoner.xlkolonne + 1
>         definisjoner.xlSheet.Cells(definisjoner.xlrad,
> definisjoner.xlkolonne).Value = definisjoner.linje_slidepluss
>         definisjoner.xlkolonne = 1
>         definisjoner.xlrad = definisjoner.xlrad + 1
> 
> if __name__ == "__main__":
>     n = definisjoner()
>     while 1 == 1:
>         n.spor()
>         n.lastned()
>         n.finn()
>         n.plukkut()
>         n.settinn() 
> 
> _______________________________________________
> Tutor maillist  -  Tutor at python.org
> http://mail.python.org/mailman/listinfo/tutor
> 

-- 
Lloyd Kvam
Venix Corp.
1 Court Street, Suite 378
Lebanon, NH 03766-1358

voice:	603-443-6155
fax:	801-459-9582




More information about the Tutor mailing list