Django:非ASCII字符
我的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" />