Python Unicode 解码错误 SUDs
好的,我在我的脚本顶部加了# -*- coding: utf-8 -*-
,这样可以从数据库中提取包含一些奇怪字符(比如Ñ、Õ、é、—、–、’等)的数据,并把这些数据存储到变量里……但是我遇到了其他问题。具体来说,我提取数据、整理数据,然后像这样把它们放到变量里:
title = product[1]
这里的product[1]
是我从数据库结果集中得到的。
然后我把它加载到Suds里,像这样:
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)
在这里,get_item_list
把product[1]
设置为标题,并且还包括其他很多节点:
inventory_item_submit.Title = title
一切运行得很好,直到我调用ca_client_inventory.service.SynchInventoryItemList,这个里面包含了array_of_inventory_item_submit
,而这个数组里有带奇怪字符的标题……这里是错误信息:
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 append
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)
现在该怎么办呢?我猜我的脚本可以处理这些奇怪字符,因为我在顶部加了# -*- coding: utf-8 -*-
,但Suds的文件顶部没有这个。难道我真的要去改Suds的文件吗……大家都知道这不是最理想的解决办法……我该怎么办呢?
1 个回答
10
#-*- coding: xxx -*-
这个东西和你遇到的错误没有关系,它只是用来说明这个文件的编码方式,而不是数据库里变量的内容。
你的错误提示是说你试图把一个包含非 ASCII 字符的 str
类型对象传给 unicode()
这个构造函数(这个函数在 suds/sax/text.py 的第43行 被调用)。
你需要把从数据库里取出来的字符串转换成 unicode
对象;比如说,如果你的数据库是用 UTF-8 编码的:
title = product[1].decode("UTF-8")
想了解更多细节,可以查看 str.decode() 的文档。