Python的Unicode解码错误SUDs

3

好的,我在我的脚本顶部有# -*- 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()文档以获取详细信息。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接