DjangoUnicodeDecodeError:'utf8'编解码器无法解码51位的字节0x80

时间:2023-01-04 20:48:39

I am passing a query id object to a view, which then fetches the object and then calls the following func:

我将查询id对象传递给视图,然后获取该对象,然后调用以下func:

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]
                                                )

But without returning from the function, I get this error when I request the page:

但是,如果没有从函数返回,我在请求页面时会收到此错误:

    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'>)

But when I call the same function in a django shell, this works fine. I am stumped. What I want to know is why: 1. it works in the shell and not on the web-server. 2. how do I make it work on the web-server with Django/WSGI.

但是当我在django shell中调用相同的函数时,这很好用。我很难过。我想知道的是:1。它在shell中运行,而不是在Web服务器上运行。 2.如何使用Django / WSGI使其在Web服务器上运行。

Thanks.

1 个解决方案

#1


1  

Because the system default local for Apache is often ASCII, whereas in your user account it is UTF-8.

因为Apache的系统默认本地通常是ASCII,而在您的用户帐户中它是UTF-8。

You either fix the code so as not to rely on implicit coercion, which will use the system default encoding for the process, or you override Apache init environment so as to set LANG to a UTF-8 variant.

您可以修复代码,以便不依赖于隐式强制,后者将使用系统默认编码进行处理,或者覆盖Apache init环境以便将LANG设置为UTF-8变体。

Try googling for 'Apache UTF-8 locale' and find the appropriate way of doing it for your Apache distro.

尝试谷歌搜索“Apache UTF-8语言环境”,找到适合您的Apache发行版的方法。

#1


1  

Because the system default local for Apache is often ASCII, whereas in your user account it is UTF-8.

因为Apache的系统默认本地通常是ASCII,而在您的用户帐户中它是UTF-8。

You either fix the code so as not to rely on implicit coercion, which will use the system default encoding for the process, or you override Apache init environment so as to set LANG to a UTF-8 variant.

您可以修复代码,以便不依赖于隐式强制,后者将使用系统默认编码进行处理,或者覆盖Apache init环境以便将LANG设置为UTF-8变体。

Try googling for 'Apache UTF-8 locale' and find the appropriate way of doing it for your Apache distro.

尝试谷歌搜索“Apache UTF-8语言环境”,找到适合您的Apache发行版的方法。