我最近设计了一个由 PyCURL 支持的上传对话框,我在一些应用程序中使用了它。
我在设置 pycurl 的 HTTPPOST 选项时遇到了问题。我这样设置它:
self.curl.setopt(self.curl.HTTPPOST, [(field, (self.curl.FORM_FILE, filename))])
如果文件名是一个字符串,一切都很好。但是,如果我向它传递一个 unicode,它会引发一个 TypeError。我有什么办法可以给它一条西里尔字母的路径吗?我尝试了 UTF-8 编码,但没有成功。感谢您的时间
更新:
我实际上是从 WX 控件获取文件名,所以在我触摸它之前它就是 unicode。然后,当我将其编码为 UTF-8 时(使用 filename = filename.encode('UTF-8')),setopt 运行良好,但在执行时一切都崩溃了:
* About to connect() to example.com port 80 (#0)
* Trying 123.123.123.123... * connected
* Connected to example.com (123.123.123.123) port 80 (#0)
* failed creating formpost data
* Connection #0 to host example.com left intact
Traceback (most recent call last):
File "c:\python27\lib\site-packages\transfer_dialogs-0.28-py2.7.egg\transfer_dialogs\transfer_dialogs.py", line 64, in perform_transfer
self.curl.perform()
error: (26, 'failed creating formpost data')
更新 2:
根据要求,更多数据。文件名包含打开对话框中 GetValue() 的结果。
logging.debug("文件名:%r 编码文件名:%r" % (filename, filename.encode('UTF-8')))
结果:
2011 年 2 月 5 日星期六 03:33:56 core.dialogs.upload_audio 调试:文件名:u'C:\Users\Q\test\\u0422\u0435\u0441\u0442\u043e\u0432\u0430\u044f \u043f\u0430\u043f\u043a\u0430\test.mp3' 编码文件名:'C: \Users\Q\test\\xd0\xa2\xd0\xb5\xd1\x81\xd1\x82\xd0\xbe\xd0\xb2\xd0\xb0\xd1\x8f \xd0\xbf\xd0\xb0\xd0\ xbf\xd0\xba\xd0\xb0\test.mp3'