上传具有非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) 我正在使用Django + Gunicorn + Nginx运行Ubuntu 14.04服务器.
Nginx配置包含utf-8字符集的行.
用户"拍卖"的区域设置输出(此用户运行服务器):
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.utf8"
LC_NUMERIC="en_US.utf8"
LC_TIME="en_US.utf8"
LC_COLLATE="en_US.utf8"
LC_MONETARY="en_US.utf8"
LC_MESSAGES="en_US.utf8"
LC_PAPER="en_US.utf8"
LC_NAME="en_US.utf8"
LC_ADDRESS="en_US.utf8"
LC_TELEPHONE="en_US.utf8"
LC_MEASUREMENT="en_US.utf8"
LC_IDENTIFICATION="en_US.utf8"
LC_ALL=en_US.utf8
Run Code Online (Sandbox Code Playgroud)
此用户的文件系统编码:
sys.getfilesystemencoding()
'UTF-8'
Run Code Online (Sandbox Code Playgroud)
但是当我在视图中调用相同的方法时,它返回'ANSI_X3.4-1968'.
所以,我无法上传带有非拉丁文件名的文件.
我花了几天时间搜索解决方案,没有任何帮助.
怎么解决?
我在 Ubuntu 服务器上运行 python Web 应用程序,同时在 OS X 上进行本地开发。
我对希伯来语使用了很多 unicode 字符串,包括操作图像的文件名,因此它们将使用希伯来语字符保存在文件系统上。
我的 Ubuntu 服务器已完全配置为 UTF-8 - 我的文件系统(在此应用程序之外)上还有其他带有希伯来语名称的图像、希伯来语命名目录等。
但是,当我尝试在 Ubuntu 上(但不是在 OS X 上)保存具有希伯来语文件名的图像时,我的应用程序会返回错误。
错误是:
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
Run Code Online (Sandbox Code Playgroud)
经过大量调查后,据我所知,我找到了最后一个可能的原因:
# Inside my virtualenv, Mac OS X
>>> import os.path
>>> os.path.supports_unicode_filenames
>>> True
# Inside my virtualenv, Ubuntu 12.04
>>> import os.path
>>> os.path.supports_unicode_filenames
>>> False
Run Code Online (Sandbox Code Playgroud)
为了好奇,这里是我的 Ubuntu 区域设置:
locale
LANG=en_US.UTF-8
LANGUAGE=
LC_CTYPE="en_US.UTF-8"
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8" …Run Code Online (Sandbox Code Playgroud) django ×2
python ×2
utf-8 ×2
django-admin ×1
encoding ×1
file-upload ×1
filesystems ×1
nginx ×1
ubuntu ×1
unicode ×1