关于python编码问题的疑惑

查看:142
本文介绍了关于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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆