繁体   English   中英

python机械化文件上传UnicodeDecode错误

[英]python mechanize file upload UnicodeDecode error

所以我有一个小脚本,可以用来将一些PDF上载到我的引文选择站点(citeulike.org)

事情是行不通的。 它这样做:

 so want to upload /Users/willwade/Dropbox/Papers/price_promoting_643127.pdf to 12589610 Traceback (most recent call last): File "citeuupload.py", line 167, in <module> cureader.parseUserBibTex() File "citeuupload.py", line 160, in parseUserBibTex self.uploadFileToCitation(b['citeulike-article-id'],self.localpapers+fileorfalse) File "citeuupload.py", line 138, in uploadFileToCitation resp = self.browser.submit() File "build/bdist.macosx-10.8-intel/egg/mechanize/_mechanize.py", line 541, in submit File "build/bdist.macosx-10.8-intel/egg/mechanize/_mechanize.py", line 203, in open File "build/bdist.macosx-10.8-intel/egg/mechanize/_mechanize.py", line 230, in _mech_open File "build/bdist.macosx-10.8-intel/egg/mechanize/_opener.py", line 193, in open File "build/bdist.macosx-10.8-intel/egg/mechanize/_urllib2_fork.py", line 344, in _open File "build/bdist.macosx-10.8-intel/egg/mechanize/_urllib2_fork.py", line 332, in _call_chain File "build/bdist.macosx-10.8-intel/egg/mechanize/_urllib2_fork.py", line 1142, in http_open File "build/bdist.macosx-10.8-intel/egg/mechanize/_urllib2_fork.py", line 1115, in do_open File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 955, in request self._send_request(method, url, body, headers) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 989, in _send_request self.endheaders(body) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 951, in endheaders self._send_output(message_body) File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/httplib.py", line 809, in _send_output msg += message_body UnicodeDecodeError: 'ascii' codec can't decode byte 0xe2 in position 544: ordinal not in range(128) 

和代码:

 def uploadFileToCitation(self,artid,file): print 'so want to upload', file, ' to ', artid self.browser.open('http://www.citeulike.org/user/'+cUser+'/article/'+artid) self.browser.select_form(name="fileupload_frm") self.browser.form.add_file(open(file, 'rb'), 'application/pdf', file, name='file') try: resp = self.browser.submit() self.wait_for_api_limit() except mechanize.HTTPError, e: print 'error' print e.getcode() print resp.read() exit() 

注意:我可以看到它正在正确读取文件(并且确实存在)。 另请注意,我正在其他地方这样做

  self.browser = mechanize.Browser() self.browser.set_handle_robots(False) self.browser.addheaders = [ ("User-agent", 'me@me.com citeusyncpy/1.0'), ] 

完整代码在这里

尝试检查这个类似的问题

To clarify, the message is constructed in httplib from the method, URL, headers, etc. If any of these is Unicode, the whole string gets converted to Unicode (I presume this is normal Python behavior). Then if you try to append a UTF-8 string you get the error I described in the original question...

从外观上看,正确的标头可以解决的编码问题。

您也可以检查此问题

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM