我正在使用Django 1.4的django.db.models.FileField制作文件上传功能
当我尝试上传名称中包含非ascii字符的文件时,会产生以下错误。
'ascii'编解码器无法对位置109-115中的字符进行编码:序数不是 在范围(128)
实际代码如下所示
file = models.FileField(_(“file”), MAX_LENGTH = 512, upload_to = os.path.join('uploaded','files','%Y','%m','%d'))
file.save(filename,file,save = True)#< - 此行产生错误 上面,如果'filename'包含非ascii字符
如果我尝试使用unicode(filename, 'utf-8')
代替filename
,则会产生
TypeError:不支持解码Unicode
如何上传名称中包含非ascii字符的文件?
我的环境信息:
sys.getdefaultencoding():'ascii'
sys.getfilesystemencoding():'UTF-8'
使用Django-1.4.10-py2.7.egg
答案 0 :(得分:2)
您需要使用.encode()对字符串进行编码:
file.save(filename.encode('utf-8', 'ignore'), file, save=True)
答案 1 :(得分:0)
在FileField定义中,'upload_to'参数可能类似于os.path.join(u'uploaded','files','%Y','%m','%d') (请参阅第一个u'uploaded'start with u')所以所有字符串都是unicode类型,这可能对你有帮助。