猿问

关于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方法就可以正常输出?

当年话下
浏览 459回答 3
3回答

繁星淼淼

因为传给 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' >>>
随时随地看视频慕课网APP

相关分类

Python
我要回答