我需要使用 python 中的请求模块发布一个文件,文件名中包含 unicode 字符。
我正在使用下面的代码:
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')}
请您参考如下方法:
唉,您没有发布堆栈跟踪或您使用的是哪个版本的 Python,所以这里涉及一些猜测。我的第一个假设是异常来自试图打开文件的行,而不是来自请求模块内部。
确保在第一行中声明了 python 文件的编码:
# -*- coding: utf-8 -*-
使用 unicode 常量,或确保您的字符串是 unicode:
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”的文件,里面有几行文字。
