我正在使用Django 1.4的django.db.models.FileField进行文件上传功能

当我尝试上传名称包含非ASCII字符的文件时,在下面产生错误。


  'ascii'编解码器无法在位置109-115处编码字符:无序号
  范围内(128)


实际代码如下


  file = models.FileField(_(“ file”),
                          max_length = 512,
                          upload_to = os.path.join('已上传','文件','%Y','%m','%d'))
  
  file.save(filename,file,save = True)#  以上,如果“文件名”包含非ASCII字符


如果我尝试使用unicode(filename, 'utf-8')而不是filename,则会在下面产生错误


  TypeError:不支持解码Unicode


如何上传名称中包含非ASCII字符的文件?

我的环境信息:


  sys.getdefaultencoding():'ascii'
  
  sys.getfilesystemencoding():'UTF-8'
  
  使用Django-1.4.10-py2.7.egg

最佳答案

您需要使用.encode()编码字符串:

file.save(filename.encode('utf-8', 'ignore'), file, save=True)

09-30 14:24
查看更多