关于python编码问题的疑惑
本文介绍了关于python编码问题的疑惑的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
初学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方法就可以正常输出?
解决方案
因为传给 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'
>>>
这篇关于关于python编码问题的疑惑的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文