相关疑难解决方法(0)

UnicodeEncodeError:'ascii'编解码器无法编码字符

上传具有非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 file-upload nginx django-admin django-uploads

36
推荐指数
5
解决办法
4万
查看次数

Django使用ANSI_X3.4-1968编码而不是UTF-8

我正在使用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'.

所以,我无法上传带有非拉丁文件名的文件.

我花了几天时间搜索解决方案,没有任何帮助.

怎么解决?

python django encoding utf-8

6
推荐指数
1
解决办法
1555
查看次数

Python:在 Ubuntu 上覆盖 os.path.supports_unicode_filenames

我在 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)

python filesystems unicode ubuntu utf-8

3
推荐指数
1
解决办法
2408
查看次数