在关注Django文档教程时,请在“/ admin / login /”中遇到“UnicodeDecodeError”

时间:2015-08-03 15:06:01

标签: python django

我的Django管理网站127.0.0.1:8000/admin/有问题。以前,我通过输入python manage.py runserver来运行服务器。我现在在Django docs教程第2部分。我关注它,当我打开管理站点时,我遇到了这个问题:

UnicodeDecodeError at /admin/login/

'utf-8' codec can't decode byte 0xee in position 394374: invalid continuation byte

Request Method:     GET
Request URL:    http://127.0.0.1:8000/admin/login/?next=/admin/
Django Version:     1.8.3
Exception Type:     UnicodeDecodeError
Exception Value:    

'utf-8' codec can't decode byte 0xee in position 394374: invalid continuation byte

Exception Location:     c:\Python34\lib\codecs.py in decode, line 319
Python Executable:  c:\Python34\python.exe
Python Version:     3.4.3
Python Path:    

['C:\\Python34\\Scripts\\mypoll',
 'C:\\WINDOWS\\system32\\python34.zip',
 'c:\\Python34\\DLLs',
 'c:\\Python34\\lib',
 'c:\\Python34',
 'c:\\Python34\\lib\\site-packages']

Server time:    Sat, 1 Aug 2015 22:19:09 +0700 

追溯:

    Traceback:
File "c:\Python34\lib\site-packages\django\core\handlers\base.py" in get_response
  164.                 response = response.render()
File "c:\Python34\lib\site-packages\django\template\response.py" in render
  158.             self.content = self.rendered_content
File "c:\Python34\lib\site-packages\django\template\response.py" in rendered_content
  133.         template = self._resolve_template(self.template_name)
File "c:\Python34\lib\site-packages\django\template\response.py" in _resolve_template
  88.         new_template = self.resolve_template(template)
File "c:\Python34\lib\site-packages\django\template\response.py" in resolve_template
  80.             return loader.get_template(template, using=self.using)
File "c:\Python34\lib\site-packages\django\template\loader.py" in get_template
  35.                 return engine.get_template(template_name, dirs)
File "c:\Python34\lib\site-packages\django\template\backends\django.py" in get_template
  30.         return Template(self.engine.get_template(template_name, dirs))
File "c:\Python34\lib\site-packages\django\template\engine.py" in get_template
  167.         template, origin = self.find_template(template_name, dirs)
File "c:\Python34\lib\site-packages\django\template\engine.py" in find_template
  141.                 source, display_name = loader(name, dirs)
File "c:\Python34\lib\site-packages\django\template\loaders\base.py" in __call__
  13.         return self.load_template(template_name, template_dirs)
File "c:\Python34\lib\site-packages\django\template\loaders\base.py" in load_template
  17.             template_name, template_dirs)
File "c:\Python34\lib\site-packages\django\template\loaders\app_directories.py" in load_template_source
  39.                     return fp.read(), filepath
File "c:\Python34\lib\codecs.py" in decode
  319.         (result, consumed) = self._buffer_decode(data, self.errors, final)

Exception Type: UnicodeDecodeError at /admin/login/
Exception Value: 'utf-8' codec can't decode byte 0xee in position 394374: invalid continuation byte

在页面底部,它指出: You're seeing this error because you have DEBUG = True in your Django settings file. Change that to False, and Django will display a standard page generated by the handler for this status code.

然后我将DEBUG = True更改为False。自动,服务器将停止,因为在命令提示符下声明:CommandError: You must set settings.ALLOWED_HOSTS if DEBUG is False.

然后,我无能为力。我该怎么办 ?有什么解决方案吗?我搜索了谷歌和stackoverflow但我找不到任何类似于我的问题。我希望有人可以帮我解决这个问题。

由于

1 个答案:

答案 0 :(得分:1)

故障:

异常由python本身发布。尝试将一些原始数据流解码为字符串时会发生这种情况。如果你是python的新手,你应该知道python3明确区分了字符串aka str(包含字符)和原始数据aka bytes(只包含字节,可能是二进制数据)。 / p>

此处引发的异常意味着由于某种原因,python被命令使用utf-8编码将一些字节解码为文本,但数据无效utf-8 - 编码文本。

假设您来自西方国家,我的赌注是文本使用ANSI或ISO-8859-1并且其中包含“î”。它在ANSI中编码为0xee,但应在UTF-8中编码为0xC3 0xAE

这可能有几个原因。在这里,从回溯中,它发生在渲染模板时。更具体地说,从应用程序的目录中呈现模板。因此,您在其中一个应用中有一个未正确编码的模板。

怎么回事?好吧,我看到你正在运行Windows机箱。在文本编码方面,Windows环境有点混乱。每个软件都有自己的默认使用意见(当它可以更改时)。例如,记事本默认仍然使用ANSI编码,或者在西欧编码ISO-8859-1。

您用于编辑模板的软件之一很可能是将文件编码为任何内容。你有两个选择:

  • 检查工具的选项,确保它们都配置为使用UTF-8编码。
  • 或者将Django配置为使用与工具相同的编码。您可以通过在设置中添加FILE_CHARSET='iso-8859-1'行或工具使用的任何编码来实现此目的。

在任何情况下,必须 确定 所有您的工具对所使用的编码达成一致,否则您将有其他解码错误或某些字符会被破坏(并显示为奇怪的î?符号)。

对Django教程没用,但值得在python生活中的某些时候阅读:Unicode handling in Python