2

错误信息:

Traceback:
File "/web/hvita_perlan/lib/python2.6/site-packages/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/web/hvita_perlan/lib/python2.6/site-packages/django/contrib/admin/views/decorators.py" in _checklogin
  19.             return view_func(request, *args, **kwargs)
File "/web/hvita_perlan/lib/python2.6/site-packages/django/views/decorators/cache.py" in _wrapped_view_func
  79.         response = view_func(request, *args, **kwargs)
File "/web/hvita_perlan/lib/python2.6/site-packages/filebrowser/views.py" in browse
  99.         fileobject = FileObject(os.path.join(file_dir, file))
File "/web/hvita_perlan/lib/python2.6/posixpath.py" in join
  70.             path += '/' + b

Exception Type: UnicodeDecodeError at /admin/filebrowser/browse/
Exception Value: 'ascii' codec can't decode byte 0xc3 in position 3: ordinal not in range(128)

无法编码/解码的字符串是:/1h����.j

文件真实文件名是:1hæð.jpg

一些信息:

> locale
LANG=en_GB.UTF-8

-

> python manage.py shell
>>> import locale
>>> locale.getlocale()
('en_GB', 'UTF8')

>>> import os
>>> os.stat('../uploads/_promotional/1hæð_fb_thumb.jpg')
posix.stat_result(st_mode=33279, st_ino=788504L, st_dev=51713L, st_nlink=1, st_uid=0, st_gid=0, st_size=1629L, st_atime=1311176542, st_mtime=1311176542, st_ctime=1311177235)

如您所见,一切都在 shell 中工作,但在 django 文件浏览器中却没有。

4

4 回答 4

1

从查看FileBrowser 仅支持 ASCII的文档中可以看出。

它在例外中说:

Exception Value: 'ascii' codec can't decode byte 0xc3 in position 3: ordinal not in range(128)

os.path.join(file_dir, file)正在获取一个 Unicode 字符串,并且它被隐式编码为 ASCII,而不是 UTF-8。在 Python 3 中对 unicode / string 进行了更改以消除此问题。

某处,file_dir需要用file_dir.encode('utf-8'). 作为使它起作用的坏技巧,您可以尝试在/web/hvita_perlan/lib/python2.6/site-packages/filebrowser/views.py第 99 行进行操作:

fileobject = FileObject(os.path.join(file_dir.encode('utf-8'), file))

然后进行测试,并在每次在 FileBrowser 中找到触发此错误的新位置时重复。

于 2011-07-20T17:56:05.940 回答
1

在 django-filebrowser 3.5.6 中有一个设置 FILEBROWSER_NORMALIZE_FILENAME 如果在您的 settings.py 中设置为 true,它将使 fb 从文件名中去除非标准字符。我很难找到有关它的信息,因此即使不确定它是否适用于旧版本,也将其发布在这里。

于 2014-10-13T22:37:49.320 回答
0

解决方案在这里:http ://diveintopython.net/xml_processing/unicode.html

我通过将 sitecustomize.py 添加到 lib/python2.6/ 解决了这个问题

# sitecustomize.py                   
# this file can be anywhere in your Python path,
# but it usually goes in ${pythondir}/lib/site-packages/
import sys
sys.setdefaultencoding('utf-8')

文件浏览器文件没有 utf-8 标头。我认为他们应该改变这一点。它看起来像这样:

#!/usr/bin/env python
# -*- coding: UTF-8 -*-
于 2011-07-21T17:24:17.283 回答
0

它是一个旧帖子,但问题仍然存在。
我正在使用 django、apache2、django-filebrowser 并获得此异常值:'ascii' codec can't decode byte 0xc3 in position...

即使使用 mod_wsgi 也对我有用。

#https://docs.djangoproject.com/en/1.2/howto/deployment/modpython/#if-you-get-a-unicodeencodeerror
#Put this in your apache2/envvars file.

export LANG='en_US.UTF-8'
export LC_ALL='en_US.UTF-8'

希望它可以帮助某人。

于 2014-03-22T18:13:39.993 回答