分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 网页技术

Cherrypy文件上传非ASCII文件名乱码问题解决

发布时间:2023-09-06 02:16责任编辑:沈小雨关键词:乱码乱码问题文件上传

Cherrypy 版本: 18.0.1

由于某些特殊原因(可能是与标准兼容的问题),Cherrypy对上传文件的原文件名使用 ISO-8859-1 编码方式解码,导致非 ASCII 的文件名显示为乱码。

解决的方式也很简单,只需要对文件名使用 ISO-8859-1 编码然后在使用 UTF-8 重新解码即可。

以下是一个完整的例子:

 1 from os import makedirs 2 from os.path import dirname, join as pathjoin, exists as pathexists 3 from cherrypy import expose, quickstart, request, config 4 ?5 HERE = dirname(__file__) 6 UPLOAD_FOLDER = pathjoin(HERE, ‘uploads‘) 7 ?8 ?9 def repaire_filename(filename):10 ????return filename.encode(‘ISO-8859-1‘).decode(‘utf-8‘, ‘replace‘)11 12 13 def save_uploadfiles(files, folder=UPLOAD_FOLDER):14 ????if not pathexists(folder):15 ????????makedirs(folder)16 ????if not isinstance(files, list):17 ????????files = [files]18 ????for upload in files:19 ????????if not upload.filename:20 ????????????continue21 ????????basename = repaire_filename(upload.filename)22 ????????filename = pathjoin(folder, basename)23 ????????with upload.file as upload_file, open(filename, ‘wb‘) as to_save:24 ????????????while True:25 ????????????????buf = upload_file.read(8192)26 ????????????????if not buf:27 ????????????????????break28 ????????????????to_save.write(buf)29 30 31 @expose32 def index(upload_files=None):33 ????if request.method == ‘POST‘:34 ????????save_uploadfiles(upload_files)35 ????return ‘‘‘36 <form method="POST" enctype="multipart/form-data">37 <div><input name="upload_files" type="file" /></div>38 <div><input name="upload_files" type="file" /></div>39 <div><input name="upload_files" type="file" /></div>40 <input type="submit" />41 </form>42 ‘‘‘43 44 45 if __name__ == ‘__main__‘:46 ????quickstart(index)

Cherrypy文件上传非ASCII文件名乱码问题解决

原文地址:https://www.cnblogs.com/inpool/p/cherrypy_upload_files.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved