用python 后端下载文件时,出现了这个错误: UnicodeEncodeError: ‘latin-1’ codec can’t encode characters in position 42-49: ordinal not in range(256)
解决思路:发现文件名有中文名字,所以导致错误,编码是latin-1编码, 所以我们需要解码成unicode在编码成latin-1。
代码:
latinFileName = filename.encode("utf-8").decode("latin1") #编码转换
self.set_header('Content-Type', 'application/x-zip-compressed')
self.set_header('Content-Disposition',
'attachment; filename='+latinFileName)
def get(self):
collectionid = self.get_argument("collectionid")
paperid = self.get_argument("paperid")
user_paper = self.application.cf['fs_paper']
dfs = self.application.fs
dirpath = os.path.join(user_paper, collectionid, paperid)
filename = os.listdir(dirpath)[0]
latinFileName = filename.encode("utf-8").decode("latin1") #编码转换
# self.set_header('Content-Type', 'application/octet-stream')
self.set_header('Content-Type', 'application/x-zip-compressed')
self.set_header('Content-Disposition',
'attachment; filename='+latinFileName)
abs_path = os.path.join(dirpath, filename)
buf_size = 1024
f = open(abs_path, 'r')
while True:
data = f.read(buf_size)
if not data:
break
self.write(data)
f.close()
self.finish()