[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