ASCII编解码器错误无法上传文件django apache和redhat

时间:2018-04-09 19:53:12

标签: django apache django-models fedora

当我尝试上传文件时,我的页面会显示:

'ascii' codec can't encode character u'\xc1' in position 51: ordinal not in range(128)

os.stat(path)

u'/opt/djangoproject/ConvocatoriaESCA/media_cdn/Luis \xc1ngel Garc\xeda Ramos/Comprobante_Ingl\xe9s_Luis_\xc1ngel_Garc\xeda_Ramos.pdf'

我在models.py上传文件的路径包含:

def upload_location_comprobante_ingles(instance, filename):
    filename = u"Comprobante_Inglés %s %s.pdf" % (instance.nombre, instance.apellidos)
    return u"%s %s/%s" % (instance.nombre, instance.apellidos, filename)

和nombre和apellidos是UTF-8字符串

1 个答案:

答案 0 :(得分:0)

问题不在 os.stat(path)中!

有两种方法可以使用Apache部署django项目。

  1. 基本配置
  2. 守护程序模式

在两种情况下都使用mod_wsgi。

默认情况下,httpd设置环境变量LANG = C。因此,文件系统编码将设置为 ascii

您可以使用 sys.getfilesystemencoding()对其进行检查,并将其输出传递到视图中某个位置的HttpResponse(或写入日志)。

要更改httpd设置为mod_wsgi进程的LANG环境变量,请打开文件 / etc / sysconfig / httpd (在基于Red Hat的操作系统上)。然后评论 LANG = C 或将其更改为您的口味。这种方法在基本配置和守护程序模式下都可以使用。

此外,守护程序模式支持WSGIDaemonProcess命令的'lang'选项。在这种情况下,您将能够为不同的虚拟主机设置不同的LANG。