在Linux上的django filebrowser 3.2中解码错误

时间:2011-07-20 17:18:36

标签: python django django-filebrowser

错误消息:

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 filebrowser中却没有。

4 个答案:

答案 0 :(得分: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')进行编码。作为一个让它发挥作用的糟糕黑客,您可以尝试在第99行的/web/hvita_perlan/lib/python2.6/site-packages/filebrowser/views.py中进行操作:

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

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

答案 1 :(得分:1)

在django-filebrowser 3.5.6中有一个设置 FILEBROWSER_NORMALIZE_FILENAME 如果在settings.py中设置为true,则会从文件名中删除非标准字符。 我很难找到有关它的信息,所以在这里发布它虽然不确定它是否适用于旧版本。

答案 2 :(得分:0)

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

我通过将libcustomize.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 -*-

答案 3 :(得分:0)

这是一个老帖子,但问题仍然存在 我使用django,apache2,django-filebrowser并获得此异常值:' ascii'编解码器不能将字节0xc3解码到位...

即使使用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'

希望它有所帮助。