初学python,今天在使用django的时候遇到一些编码问题,希望大神指教下。
# coding:utf-8
from django.http import HttpResponse
def index(request):
return HttpResponse("这是首页")
def news(request, news_id):
return HttpResponse("新闻ID是:%s" % news_id)
我在访问index方法的时候不会报错,但是访问news方法的时候却报错,只有把第二个方法加上u,也就是这样才能正确输出
def news(request, news_id):
return HttpResponse(u"新闻ID是:%s" % news_id)
我想问加上u之后python到底干了什么动作,为什么第一个index方法就可以正常输出?
3 回答
繁星淼淼
TA贡献1775条经验 获得超11个赞
因为传给 view 函数的参数的值都是 unicode 字符串, 所以:
return HttpResponse("新闻ID是:%s" % news_id)
实际上执行的是 :
return HttpResponse("新闻ID是:%s" % u'2')
当 % u'2'
的时候因为参数是 unicode 字符串,所以 python 会尝试将 "新闻ID是:%s"
decode 为 unicode 字符串,而默认 decode 时的编码是 ascii
无法 decode "新闻ID是:%s"
,所以报错。
测试验证:
>>> "新闻ID是:%s" % u'2'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position 0: ordinal not in range(128)
>>> "ID is :%s" % u'2'
u'ID is :2'
>>>
加 u
后是两个 unicode 字符串进行格式话,没问题 :
return HttpResponse(u"新闻ID是:%s" % u'2')
>>> u"新闻ID是:%s" % u'2'
u'\u65b0\u95fbID\u662f:2'
>>>
添加回答
举报
0/150
提交
取消