Master_SergiusТут наверняка вопрос кодировки, файл судя по расширению сделан в винде, в винде имена файлов в CP1251, curl вполне может конвертировать их в utf, а ваш скрипт этого скорее всего не делает. Поищите по справке, наверняка где-то этот вопрос решается.
Но curl ведь отсылает.
>>> s = 'фывапролдж.xls' >>> s.encode('utf-8') b'\xd1\x84\xd1\x8b\xd0\xb2\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd0\xbb\xd0\xb4\xd0\xb6.xls' >>> s.encode('utf-8').decode('cp1251') 'фывапролдж.xls' >>> s.encode('utf-8').decode('cp1251').encode('cp1251') b'\xd1\x84\xd1\x8b\xd0\xb2\xd0\xb0\xd0\xbf\xd1\x80\xd0\xbe\xd0\xbb\xd0\xb4\xd0\xb6.xls' >>> s.encode('utf-8').decode('cp1251').encode('cp1251').decode('utf-8') 'фывапролдж.xls' >>>
curl -X POST http://localhost:12345 -F "sample=@Квартальный отчет.xls" -F "private=true"
[guest@localhost ~]$ nc -l 12345
POST / HTTP/1.1
Host: localhost:12345
User-Agent: curl/7.53.1
Accept: */*
Content-Length: 336
Expect: 100-continue
Content-Type: multipart/form-data; boundary=------------------------4672daf0f3358c93
--------------------------4672daf0f3358c93
Content-Disposition: form-data; name="sample"; filename="Квартальный отчет.xls"
Content-Type: application/octet-stream
test
--------------------------4672daf0f3358c93
Content-Disposition: form-data; name="private"
true
--------------------------4672daf0f3358c93--
[guest@localhost ~]$
>>> "=?utf-8?B?%s?" % base64.b64encode('Привет мир.txt') '=?utf-8?B?0J/RgNC40LLQtdGCINC80LjRgC50eHQ=?'
u'\xd0\x92\xd0\x9e\xd0\x94\xd0\x9d\xd0\xab\xd0\x99 \xd0\x9a\xd0\x9e\xd0\x94\xd0\x95\xd0\x9a\xd0\xa1 2017.pdf'
ÐÐÐÐЫРÐÐÐÐÐС 2017.pdf
>>> s = u'\xd0\x92\xd0\x9e\xd0\x94\xd0\x9d\xd0\xab\xd0\x99 \xd0\x9a\xd0\x9e\xd0\x94\xd0\x95\xd0\x9a\xd0\xa1 2017.pdf' >>> s u'\xd0\x92\xd0\x9e\xd0\x94\xd0\x9d\xd0\xab\xd0\x99 \xd0\x9a\xd0\x9e\xd0\x94\xd0\x95\xd0\x9a\xd0\xa1 2017.pdf' >>> s.encode('latin1').decode('utf-8') u'\u0412\u041e\u0414\u041d\u042b\u0419 \u041a\u041e\u0414\u0415\u041a\u0421 2017.pdf' >>> out = s.encode('latin1').decode('utf-8') >>> print out ВОДНЫЙ КОДЕКС 2017.pdf >>>
s = u'\xd0\x92\xd0\x9e\xd0\x94\xd0\x9d\xd0\xab\xd0\x99 \xd0\x9a\xd0\x9e\xd0\x94\xd0\x95\xd0\x9a\xd0\xa1 2017.pdf' >>> repr(s) "u'\\xd0\\x92\\xd0\\x9e\\xd0\\x94\\xd0\\x9d\\xd0\\xab\\xd0\\x99 \\xd0\\x9a\\xd0\\x9e\\xd0\\x94\\xd0\\x95\\xd0\\x9a\\xd0\\xa1 2017.pdf'" >>> repr(s)[2:-1] '\\xd0\\x92\\xd0\\x9e\\xd0\\x94\\xd0\\x9d\\xd0\\xab\\xd0\\x99 \\xd0\\x9a\\xd0\\x9e\\xd0\\x94\\xd0\\x95\\xd0\\x9a\\xd0\\xa1 2017.pdf' >>> repr(s)[2:-1].decode('string_escape') '\xd0\x92\xd0\x9e\xd0\x94\xd0\x9d\xd0\xab\xd0\x99 \xd0\x9a\xd0\x9e\xd0\x94\xd0\x95\xd0\x9a\xd0\xa1 2017.pdf' >>> repr(s)[2:-1].decode('string_escape').decode('utf-8') u'\u0412\u041e\u0414\u041d\u042b\u0419 \u041a\u041e\u0414\u0415\u041a\u0421 2017.pdf' >>> print repr(s)[2:-1].decode('string_escape').decode('utf-8') ВОДНЫЙ КОДЕКС 2017.pdf