【问题标题】:ASCII codec error Can't upload files django apache and redhatASCII 编解码器错误无法上传文件 django apache 和 redhat
【发布时间】:2018-04-09 19:53:12
【问题描述】:

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

'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 字符串

【问题讨论】:

  • 您的路径有问题。答案在this question
  • path.decode('utf8') 必须在setting.py或者model里面设置?

标签: django apache django-models fedora


【解决方案1】:

问题不在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。

【讨论】:

    猜你喜欢
    • 2015-01-28
    • 2017-03-31
    • 1970-01-01
    • 1970-01-01
    • 2014-08-12
    • 2015-02-03
    • 2019-09-01
    • 2021-02-07
    • 2017-02-19
    相关资源
    最近更新 更多