Python unicode Decode Error SUDs
OK so I have # -*- coding: utf-8 -*-
at the top of my script and it worked for being able to pull data from the database that had funny chars(Ñ ,Õ,é,—,–,’,…) in it and store that data into variables...but I have run into other problems, see I pull my data, organize it, and then dump it into a variables like so:
title = product[1]
Where product[1]
is from my database result set
Then I load it up for Suds like so:
array_of_inventory_item_submit = ca_client_inventory.factory.create('ArrayOfInventoryItemSubmit')
for product in products:
inventory_item_submit = ca_client_inventory.factory.create('InventoryItemSubmit')
inventory_item_list = get_item_list(product)
inventory_item_submit = [inventory_item_list]
array_of_inventory_item_submit.InventoryItemSubmit.append(inventory_item_submit)
#Call that service baby!
ca_client_inventory.service.SynchInventoryItemList(accountID, array_of_inventory_item_submit)
Where get_item_list
sets product[1]
to title and (including a whole bunch of other nodes):
inventory_item_submit.Title = title
So everything runs fine until I call ca_client_inventory.service.SynchInventoryItemList that contains array_of_inventory_item_submit
which contains the title w/ the funky char...here is the error:
Traceback (most recent call last):
File "upload_all_inventory_ebay.py", line 421, in <module>
ca_client_inventory.service.SynchInventoryItemList(accountID, array_of_inventory_item_submit)
File "build/bdist.macosx-10.6-i386/egg/suds/client.py", line 539, in __call__
File "build/bdist.macosx-10.6-i386/egg/suds/client.py", line 592, in invoke
File "build/bdist.macosx-10.6-i386/egg/suds/bindings/binding.py", line 118, in get_message
File "build/bdist.macosx-10.6-i386/egg/suds/bindings/document.py", line 63, in bodycontent
File "build/bdist.macosx-10.6-i386/egg/suds/bindings/document.py", line 105, in mkparam
File "build/bdist.macosx-10.6-i386/egg/suds/bindings/binding.py", line 260, in mkparam
File "build/bdist.macosx-10.6-i386/egg/suds/mx/core.py", line 62, in process
File "build/bdist.macosx-10.6-i386/egg/suds/mx/core.py", line 75, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/appender.py", line 102, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/appender.py", line 243, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/appender.py", line 182, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/core.py", line 75, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/appender.py", line 102, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/appender.py", line 298, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/appender.py", line 182, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/core.py", line 75, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/appender.py", line 102, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/appender.py", line 298, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/appender.py", line 182, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/core.py", line 75, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/appender.py", line 102, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/appender.py", line 243, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/appender.py", line 182, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/core.py", line 75, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/appender.py", line 102, in append
File "build/bdist.macosx-10.6-i386/egg/suds/mx/appender.py", line 198, in appen开发者_JAVA百科d
File "build/bdist.macosx-10.6-i386/egg/suds/sax/element.py", line 251, in setText
File "build/bdist.macosx-10.6-i386/egg/suds/sax/text.py", line 43, in __new__
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 116: ordinal not in range(128)
Now what? My guess is my script can take in these funky chars because I have # -*- coding: utf-8 -*-
at the top but Suds does NOT have that at the top of its files. Do I really want to go and change the Suds files...we all know this is the least desired last possible solution...what can I do?
#-*- coding: xxx -*-
has nothing to do with this error, it only applies to the encoding of the source file it is declared in, not the content of variables coming from a database.
Your error says that you try to pass a str
type object containing non ASCII characters to the unicode()
constructor (which is called at line 43 of suds/sax/text.py).
You have to convert the strings coming from the database to unicode
objects ; for example if your database is encoded in UTF-8:
title = product[1].decode("UTF-8")
See the str.decode() documentation for details.
精彩评论