2011-09-08 59 views
2

我有一個Python 2.7腳本SendPreord.py它使用SUDS與Web服務進行通信。在腳本中,我調用一個Web服務方法,將參數作爲字符串runJob(par1, par2, par3))傳遞。它與絃樂中的西歐字符配合得很好。我用Eclipse在PyDev上運行它。SUDS中的UnicodeDecodeError,但僅限於由py2exe生成的.exe

然後我生成.exe使用py2exe。現在,它給我的錯誤

Traceback (most recent call last): 
    File "SendPreord.py", line 80, in <module> 
    File "suds\client.pyc", line 542, in __call__ 
    File "suds\client.pyc", line 602, in invoke 
    File "suds\client.pyc", line 637, in send 
    File "suds\transport\https.pyc", line 64, in send 
    File "suds\transport\http.pyc", line 77, in send 
    File "suds\transport\http.pyc", line 118, in u2open 
    File "urllib2.pyc", line 391, in open 
    File "urllib2.pyc", line 409, in _open 
    File "urllib2.pyc", line 369, in _call_chain 
    File "urllib2.pyc", line 1173, in http_open 
    File "urllib2.pyc", line 1142, in do_open 
    File "httplib.pyc", line 946, in request 
    File "httplib.pyc", line 987, in _send_request 
    File "httplib.pyc", line 940, in endheaders 
    File "httplib.pyc", line 801, in _send_output 
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 484: ordinal not in range(128) 

的代碼導致錯誤是:

result = ws_client.service.runJob(par1, par2, par3) 

調查,我意識到,像°èòà刪除字符解決了這個問題...但我不能!我必須保留我傳遞的琴絃。

所以,我想通過他們之前解碼字符串:

result = ws_client.service.runJob(par1.decode('latin9'), par2.decode('latin9'), par3.decode('latin9')) 

再次中的.py所有的作品,但不是以.exe。也許PyDev以某種方式糾正了這個問題?


ATTACHMENTS

Setup.py:

from distutils.core import setup 
import py2exe 
setup(console=['src/SendPreord.py']) 

從py2exe輸出日誌有趣的提取物:

*** copy dlls *** 
copying C:\Python27\lib\site-packages\py2exe\run.exe -> C:\Users\xxxxxxx\workspace\eclipse\SendPreord\dist\SendPreord.exe 
The following modules appear to be missing 
['ElementC14N', '_scproxy', 'ntlm'] 

*** binary dependencies *** 
Your executable(s) also depend on these dlls which are not included, 
you may or may not need to distribute them. 

Make sure you have the license if you distribute any of them, and 
make sure you don't distribute files belonging to the operating system. 

    USER32.dll - C:\Windows\system32\USER32.dll 
    SHELL32.dll - C:\Windows\system32\SHELL32.dll 
    WSOCK32.dll - C:\Windows\system32\WSOCK32.dll 
    ADVAPI32.dll - C:\Windows\system32\ADVAPI32.dll 
    WS2_32.dll - C:\Windows\system32\WS2_32.dll 
    KERNEL32.dll - C:\Windows\system32\KERNEL32.dll 

回答

0

你猜對編碼轉換被咬傷Python的。你嘗試的第一部分是正確的:首先用(希望是正確的)編碼解碼。在發送之前,您必須先對 進行編碼,最好使用類似UTF-8的格式,否則Python會嘗試使用「默認」編碼(這在大多數安裝ASCII中)。 I've written this here before

相關問題