嗨, 我遇到了Python Django的编码错误。 在我的views.py中,我有以下内容:
from django.shortcuts import render
from django.http import HttpResponse
from django.template.loader import get_template
from django.template import Context
# Create your views here.
def hello(request):
name = 'Mike'
html = '<html><body>Hi %s, this seems to have !!!!worked!</body></html>' % name
return HttpResponse(html)
def hello2(request):
name = 'Andrew'
html = '<html><body>Hi %s, this seems to have !!!!worked!</body></html>' % name
return HttpResponse(html)
# -*- coding: utf-8 -*-
def hello3_template(request):
name = u'哈哈'
t = get_template('hello3.html')
html = t.render(Context({'name' : name}))
return HttpResponse(html)
我收到以下错误:
我查了那个链接,但我仍然对如何解决它感到困惑。
你可以帮忙吗? 谢谢, smallbee正如lalo所指出的,以下行必须位于顶部
# -*- coding: utf-8 -*-
谢谢大家。
答案 0 :(得分:12)
嗯,你在这里:
将# -*- coding: utf-8 -*-
放在文件顶部,定义de encoding。
docs说:
如果没有其他的话,Python将默认为ASCII标准编码 给出了编码提示。
To define a source code encoding, a magic comment must be placed into the source files either as first or second line in the file, such as:
所以,你的代码必须开始:
# -*- coding: utf-8 -*-
from django.shortcuts import render
from django.http import HttpResponse
from django.template.loader import get_template
...
希望帮助
答案 1 :(得分:2)
如果您阅读PEP 263,则会明确说明:
要定义源代码编码,必须将魔术注释作为文件中的第一行或第二行放入源文件中...
(最初的提案说它必须是#!之后的第一行,如果有的话,但据推测它可能更容易实现“第一行或第二行”规则。)
实际参考文档以不太友好但更严格的方式为3.3和2.7描述了同样的事情。
文件后面出现的“魔术评论”并不神奇,只是在不影响Python编译器的情况下误导读者的评论。
u'哈哈'
的UTF-8是'\xe5\x93\x88\xe5\x93\x88'
,因此这些是文件中的字节。在最近的Python版本(包括2.7和所有3.x)中,默认编码始终是ASCII,除非文件以UTF BOM开头(正如一些Microsoft编辑所喜欢的那样);即使在2.3-2.6中,它通常是ASCII;在早期版本中,它是Latin-1。尝试解释'\xe5\x93\x88\xe5\x93\x88'
将失败,并且您看到的确切例外。