Django:非ASCII字符

dkg*_*irl 21 python django unicode utf-8

我的Django视图/模板无法处理特殊字符.由于ñ,下面的简单视图失败了.我得到以下错误:

文件中的非ASCII字符'\ xf1'

def test(request):
    return HttpResponse('español')
Run Code Online (Sandbox Code Playgroud)

我需要设置一些常规设置吗?如果我必须分别处理所有字符串会很奇怪:非美国字母很常见!

编辑 这是对以下评论的回应.它仍然失败:(

我按照Gabi的建议将编码注释添加到我的视图中,并将元信息添加到我的html中.

现在我上面的例子没有给出错误,但是ñ显示不正确.

我试过了return render_to_response('tube/mysite.html', {"s": 'español'}).没有错误,但是没有错误(如果s = hello则会发生).html页面上的其他信息显示正常.

我尝试将'español'硬编码到我的HTML中,但失败了:

UnicodeDecodeError'utf8'编解码器无法解码字节0xf.

我在字符串前面尝试了你:

SyntaxError(unicode error)'utf8'编解码器无法解码字节0xf1

这有帮助吗?

Gab*_*aru 37

你在脚本的开头是否有这个:

# -*- coding: utf-8 -*-
Run Code Online (Sandbox Code Playgroud)

...?

见:http://www.python.org/dev/peps/pep-0263/

编辑:对于第二个问题,它是关于HTML编码.把它放在你的html页面的头部(你应该把请求作为html页面发送,否则我认为你不能正确输出该字符):

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
Run Code Online (Sandbox Code Playgroud)


小智 16

插入views.py的顶部

# -*- coding: utf-8 -*-
Run Code Online (Sandbox Code Playgroud)

并在字符串前添加"u"

my_str = u"plus de détails"
Run Code Online (Sandbox Code Playgroud)

解决了!


Dom*_*ola 8

您需要Gabi提到的编码注释,并在字符串前使用unicode"u"符号:

return HttpResponse(u'español')
Run Code Online (Sandbox Code Playgroud)

我在网上找到的解释所有ASCII/Unicode混乱的最佳页面是:http: //www.stereoplex.com/blog/python-unicode-and-unicodedecodeerror

请享用!