当我尝试上传文件时,我的页面会显示:
'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字符串
答案 0 :(得分:0)
问题不在 os.stat(path)中!
有两种方法可以使用Apache部署django项目。
在两种情况下都使用mod_wsgi。
默认情况下,httpd设置环境变量LANG = C。因此,文件系统编码将设置为 ascii 。
您可以使用 sys.getfilesystemencoding()对其进行检查,并将其输出传递到视图中某个位置的HttpResponse(或写入日志)。
要更改httpd设置为mod_wsgi进程的LANG环境变量,请打开文件 / etc / sysconfig / httpd (在基于Red Hat的操作系统上)。然后评论 LANG = C 或将其更改为您的口味。这种方法在基本配置和守护程序模式下都可以使用。
此外,守护程序模式支持WSGIDaemonProcess命令的'lang'选项。在这种情况下,您将能够为不同的虚拟主机设置不同的LANG。