Django:非ASCII字符

22 投票
7 回答
39708 浏览
提问于 2025-04-16 09:37

我的Django视图/模板无法处理特殊字符。下面这个简单的视图因为ñ字符出错了。我收到的错误信息是:

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

def test(request):
    return HttpResponse('español')

我需要设置什么通用的选项吗?如果我每个字符串都要单独处理,那就太奇怪了:非美式字母其实很常见啊!

编辑

这是对下面评论的回应。它还是出错了 :(

我按照Gabi的建议,在我的视图中添加了编码注释,并在我的HTML中添加了meta信息。

现在我上面的例子没有报错了,但ñ字符显示不正确。

我尝试了 return render_to_response('tube/mysite.html', {"s": 'español'})。没有错误,但它不显示(如果s = hello就可以)。HTML页面上的其他信息显示正常。

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

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

我尝试在字符串前加u:

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

这有什么帮助吗??

7 个回答

8

你需要使用Gabi提到的代码注释,并且在你的字符串前面加上unicode的“u”标志:

return HttpResponse(u'español')

我在网上找到的最好的页面,详细解释了ASCII和Unicode的各种混乱,就是这个:

http://www.stereoplex.com/blog/python-unicode-and-unicodedecodeerror

祝你好运!

17

在views.py文件的最上面插入以下内容

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

然后在你的字符串前面加上“u”字母

my_str = u"plus de détails"

问题解决了!

38

你在脚本开头有写这个吗:

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

...?

看看这个链接:http://www.python.org/dev/peps/pep-0263/

编辑:关于第二个问题,是关于html编码的。把这个放在你的html页面的头部(你应该把请求发送为一个html页面,否则我觉得你可能无法正确输出那个字符):

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

撰写回答