Ошибка декодирования в django filebrowser 3.2 на Linux - PullRequest
2 голосов
/ 20 июля 2011

Сообщение об ошибке:

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)

Как видите, все работает в оболочке, но не в файловом браузере django.

Ответы [ 4 ]

1 голос
/ 14 октября 2014

В django-filebrowser 3.5.6 есть настройка FILEBROWSER_NORMALIZE_FILENAME, если в вашем файле settings.py задано значение true, это приведет к тому, что fb удалит нестандартные символы из имени файла.У меня были проблемы с поиском информации об этом, поэтому размещение здесь, хотя и не уверен, работает ли он для старой версии.

1 голос
/ 20 июля 2011

Из документов видно, что 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.Unicode / строковые изменения были сделаны в Python 3. Чтобы устранить эту проблему.

Где-то, 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, которое вызывает эту ошибку.

0 голосов
/ 22 марта 2014

Это старый пост, но проблема остается.
Я использую 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'

Надеюсь, это кому-нибудь поможет.

0 голосов
/ 21 июля 2011

Решение здесь: 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 -*-
...