vor*_*pyg 36 django file-upload nginx django-admin django-uploads
上传具有非ASCII字符的文件时,我得到UnicodeEncodeError:
Exception Type: UnicodeEncodeError at /admin/studio/newsitem/add/
Exception Value: 'ascii' codec can't encode character u'\xf8' in position 78: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
查看完整堆栈跟踪.
我用MySQL和nginx以及FastCGI运行Django 1.2.
这是根据Django Trac数据库修复的问题,但我仍然遇到问题.欢迎任何有关如何修复的建议.
编辑:这是我的图像字段:
image = models.ImageField(_('image'), upload_to='uploads/images', max_length=100)
Run Code Online (Sandbox Code Playgroud)
aka*_*ola 39
对于在使用Supervisor运行Django时遇到此问题的任何人,解决方案是将以下内容添加到supervisord
Supervisor配置部分:
environment=LANG="en_US.utf8", LC_ALL="en_US.UTF-8", LC_LANG="en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)
这解决了在Debian Squeeze上运行的Supervisor 3.0a8中的问题.
Lin*_*n B 24
在必须在只接受ascii的地方(如控制台或路径)中显示unicode字符串的情况下,您必须告诉Python您希望它替换非ascii字符的最佳工作量.
>> problem_str = u'This is not all ascii\xf8 man'
>> safe_str = problem_str.encode('ascii', 'ignore')
>> safe_str
'This is not all ascii man'
Run Code Online (Sandbox Code Playgroud)
管理员可以通过谨慎处理Django模板来防止编码问题,但如果你曾经添加过自定义列并忘记将值转换为ascii,或者你为模型覆盖str方法而忘记这样做,你会得到相同的错误,阻止模板渲染.
如果将此字符串保存到您的(希望是utf8)数据库中就没有问题,看起来您正在尝试上传使用具有非ascii字符的实体标题的文件.
Ale*_*bov 12
希望这会有所帮助.就我而言,我正在通过daemontools运行django.
设置
export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'
Run Code Online (Sandbox Code Playgroud)
在执行manage.py之前的运行脚本中解决了uploads filename的问题
vor*_*pyg 12
在调查了一些后,我发现我没有在我的主Nginx配置文件中设置charset:
http {
charset utf-8;
}
Run Code Online (Sandbox Code Playgroud)
通过添加上述内容,问题就消失了,我认为这是处理此问题的正确方法.
Paw*_*man 10
akaihola的回答很有帮助.对于那些通过upstart脚本管理uWSGI运行django app的人,只需将这些行添加到/etc/init/yourapp.conf
env LANG="en_US.utf8"
env LC_ALL="en_US.UTF-8"
env LC_LANG="en_US.UTF-8"
Run Code Online (Sandbox Code Playgroud)
它解决了我的问题.
归档时间: |
|
查看次数: |
44996 次 |
最近记录: |