2015-11-02 2 views
2

Мне нужно отправить файл с помощью модуля запросов в python, который имеет символы Unicode в имени файла.Отправка файлов с символами Unicode в имени файла с использованием request.post в python

Я использую ниже код:

url = "https://demo.php" 
headers = {'Accept': 'application/vnd.ve.v1.0+json','API': 'aasadadas'} 
file_up = {'filename': open(file_name, 'rb')} 
upload_file_rest =requests.post(url,files=file_up,headers=headers,verify=False) 

Используя приведенный выше код и при передаче файла, как "指 事 字 .exe", я получаю ниже исключения:

'ascii' codec can't decode byte 0xc2 in position 26: ordinal not in range(128) 

Любая помощь действительно ценится.

PS: Я уже пробовал ниже код, и он не работает для меня:

file_up = {'filename': open(file_name.encode('utf-8'), 'rb')} 

ответ

0

Theres ДЕЙСТВИТЕЛЬНО хорошее объяснение, что если вы читаете это даст вам много понимания. Он выглядит длинным, но его на самом деле не так и хорошо стоит: http://nedbatchelder.com/text/unipain/unipain.html#1

Но, кодирование преобразует объект unicode в строковый объект. Но здесь вы вызывали его на строковый объект. Таким образом, python должен сначала преобразовать строку в объект unicode. Таким образом, это эквивалент

"指事字".decode().encode('utf-8') 

Но декодирование не выполняется, поскольку строка недействительна ascii. Вот почему вы получаете жалобу о невозможности декодирования.

0

Увы, вы не отправляли трассировку стека или какую версию Python вы используете, поэтому здесь есть некоторые предположения. Мое первое предположение заключается в том, что исключение исходит из строки, которая пытается открыть файл, а не из модуля запросов.

Убедитесь, что вы объявляете кодировку файла питона в первой строке:

# -*- coding: utf-8 -*- 

Использование Юникода константы, или убедитесь, что ваши строки Юникода:

filename = u"指事字.txt" 

После этого, он должен можно открыть файл. Этот фрагмент кода работает на моем компьютере (Macbook, Python 2.7.10):

filename = u"指事字.txt" 
f = open(filename, "rb") 
data = f.read() 
print u"%d bytes in %s" % (len(data), filename) 

... Я первый создал файл с именем 指 事 字 .txt в текущем каталоге, с некоторыми строками текста в нем.