DjangoUnicodeDecodeError: кодек «utf8» не может декодировать байт 0x80 в позиции 51 - PullRequest
1 голос
/ 13 февраля 2012

Я передаю объект id запроса в представление, которое затем выбирает объект и затем вызывает следующую функцию:

def portAdmin(self,status):

    status = status
    self.adminStateDict = {
                        'activate':      tuple([tuple([1,3,6,1,2,1,2,2,1,7,self.snmpPortOID]),rfc1902.Integer32(1)]),
                        'deactivate' : tuple([tuple([1,3,6,1,2,1,2,2,1,7,self.snmpPortOID]),rfc1902.Integer32(2)]),
                        }
    (errorIn, activateErrorStatus, errorIndex, varBinds) = cmdgen.CommandGenerator().setCmd(
                                                cmdgen.CommunityData('my-agent', '.xxxx', 0),
                                                cmdgen.UdpTransportTarget((self.snmpIp, 161)),
                                                self.adminStateDict[status]
                                                )

Но, не возвращаясь из функции, я получаю эту ошибку при запросе страницы:

    Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/django/core/servers/basehttp.py", line 283, in run
    self.result = application(self.environ, self.start_response)
  File "/usr/local/lib/python2.7/dist-packages/django/contrib/staticfiles/handlers.py", line 68, in __call__
    return self.application(environ, start_response)
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/wsgi.py", line 272, in __call__
    response = self.get_response(request)
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 169, in get_response
    response = self.handle_uncaught_exception(request, resolver, sys.exc_info())
  File "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py", line 203, in handle_uncaught_exception
    return debug.technical_500_response(request, *exc_info)
  File "/usr/local/lib/python2.7/dist-packages/django/views/debug.py", line 59, in technical_500_response
    html = reporter.get_traceback_html()
  File "/usr/local/lib/python2.7/dist-packages/django/views/debug.py", line 117, in get_traceback_html
    frame['vars'] = [(k, force_escape(pprint(v))) for k, v in frame['vars']]
  File "/usr/local/lib/python2.7/dist-packages/django/template/defaultfilters.py", line 34, in _dec
    args[0] = force_unicode(args[0])
  File "/usr/local/lib/python2.7/dist-packages/django/utils/encoding.py", line 93, in force_unicode
    raise DjangoUnicodeDecodeError(s, *e.args)
DjangoUnicodeDecodeError: 'utf8' codec can't decode byte 0x80 in position 51: invalid start byte. You passed in 'MibTableColumn((1, 3, 6, 1, 6, 3, 18, 1, 1, 1, 4), \x80\x00O\xb8\x05\xc0\xa8\x06 \x0c\r)' (<type 'str'>)

Но когда я вызываю ту же функцию в оболочке django, это прекрасно работает. Я в тупике. Я хочу знать, почему: 1. он работает в оболочке, а не на веб-сервере. 2. как мне заставить его работать на веб-сервере с Django / WSGI.

Спасибо.

1 Ответ

1 голос
/ 13 февраля 2012

Поскольку системным локальным по умолчанию для Apache часто является ASCII, тогда как в вашей учетной записи пользователя это UTF-8.

Вы либо исправляете код, чтобы не полагаться на неявное принуждение, которое будет использовать для процесса кодировку системы по умолчанию, либо вы переопределяете среду инициализации Apache, чтобы установить для LANG вариант UTF-8.

Попробуйте поискать «локаль Apache UTF-8» и найдите подходящий способ сделать это для вашего дистрибутива Apache.

...