Python Django编码错误,非ASCII字符'\ xe5'

时间:2013-12-21 01:41:37

标签: python django view encoding

嗨, 我遇到了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)

我收到以下错误:

/ hello3_template /

中的SyntaxError   第19行的文件D:\ WinPython-32bit-2.7.5.3 \ django_test \ article \ views.py中的非ASCII字符'\ xe5',但未声明编码;有关详细信息,请参阅http://www.python.org/peps/pep-0263.html(views.py,第19行)

我查了那个链接,但我仍然对如何解决它感到困惑。

你可以帮忙吗? 谢谢, smallbee

正如lalo所指出的,以下行必须位于顶部

# -*- coding: utf-8 -*-

谢谢大家。

2 个答案:

答案 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.32.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'将失败,并且您看到的确切例外。