3

OK # -*- 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ファイルを変更したいですか...これが最も望ましくない最後の可能な解決策であることは誰もが知っています...どうすればよいですか?

4

1 に答える 1

10

#-*- coding: xxx -*-このエラーとは関係ありません。データベースからの変数の内容ではなく、宣言されているソース ファイルのエンコーディングにのみ適用されます。

あなたのエラーは、str非 ASCII 文字を含む型オブジェクトをunicode()コンストラクター ( suds/sax/text.py の 43 行目で呼び出される) に渡そうとしていることを示しています。

データベースからの文字列をunicodeオブジェクトに変換する必要があります。たとえば、データベースが UTF-8 でエンコードされている場合:

title = product[1].decode("UTF-8")

詳細については、str.decode()のドキュメントを参照してください。

于 2010-06-01T22:42:29.700 に答える