Django上的文件编码

2024-09-27 20:18:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我最近将Django应用程序部署到了预先设置的宿主服务器(Red Hat)上,在短时间使用之后,上传的图像出现了unicodeincode错误,其中包含西里尔文符号(俄语,具体来说),但在俄语作品中保存CharFields数据还可以。你知道吗

enter image description here

但是,相同的代码在我的个人电脑上没有任何缺陷(在Ubuntu和Windows上都测试过)。在服务器上检查文件编码之后,发现宿主上的默认系统编码是ANSI,它是ASCII的扩展

screenshot from SSH client

在这一点上,我已经联系了技术支持,他们声称这可能是Django的错误,因为他们在他们的服务器上使用UTF-8编码(那怎么办sys.getfilesystem编码()显示,从操作系统编码继承的是ASCII?)你知道吗

我的另一个疑点是混乱的地区

enter image description here

结果证明是真的。你知道吗

不管怎样,有没有什么方法可以证明这是Django的错,并且可以用Python/Django黑客来修复,或者完全是服务器的错?你知道吗

编辑:要清楚的是,那不是VDS,那只是用预设配置的常规主机,所以我不能完全控制环境设置,但是,我可以配置.htaccess文件和.fcgi脚本,所以我相信它是Apache服务器


Tags: 文件django图像服务器证明应用程序编码hat
2条回答

I've contacted tech support and they claimed (...) they use UTF-8 encoding on their servers

这一论断充其量也值得商榷。你知道吗

在linux系统上,文件名编码不是在文件系统级别全局设置的,而是取决于环境—环境通常是按用户设置的,但可以在执行命令之前重写。你知道吗

注意,django应用程序的有效fs编码取决于启动django进程的进程的环境(apache、gunicorn等等),并且您在自己的python shell中找到的值可能不是django看到的值。你没有提到你是如何运行你的django应用程序,所以它是不可能告诉你到底在哪里寻找,但至少上述信息应该指向正确的方向你。你知道吗

Anyway, is there any way that it's a Django's fault

完全是胡说八道。你知道吗

and it can be fixed with Python/Django hacks

当然不是。正确的解决方案是修复进程环境、周期。你知道吗

我在生产服务器上遇到了同样的问题。重要的是使用正确的编码部署django应用程序。你知道吗

我使用gunicorn进行部署,并通过supervisor运行gunicorn。在supervisor配置中,我定义了编码:

这是我的django应用程序的主管配置文件:

[program:django_app]
command = /path/to/gunicorn/start/file                 ; Command to start app
user = matyas                                                     ; User to run as
stdout_logfile = /././logs/gunicorn_supervisor.log     ; Where to write log messages
redirect_stderr = true                                            ; Save stderr in the same log
environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8                   ; Set UTF-8 as default encoding

线路

environment=LANG=en_US.UTF-8,LC_ALL=en_US.UTF-8  

是重要的宣言。如果不使用supervisor,请确保将此语言参数传递给在服务器上启动django应用程序的命令。你知道吗

相关问题 更多 >

    热门问题