亿万教师注册平台关于python编码题目的迷惑

初学python,今天在运用django的时分遇到一些编码题目,盼望大神指教下。

# coding:utf-8
from django.http import HttpResponse


def indexrequest:
    return HttpResponse"这是首页"


def newsrequest, news_id:
    return HttpResponse"旧事ID是:%s" % news_id

我在拜访index办法的时分不会报错,但是拜访news办法的时分却报错,只要把第二个办法加上u,也便是如许才干精确输入

def newsrequest, news_id:
    return HttpResponseu"旧事ID是:%s" % news_id

我想问加上u之后python究竟干了什么办法,为什么第一个index办法就可以正常输入?

由于传给 view 函数的参数的值都是 unicode 字符串, 以是:

return HttpResponse"旧事ID是:%s" % news_id

实际上实行的是 :

return HttpResponse"旧事ID是:%s" % u2

% u2 的时分由于参数是 unicode 字符串,以是 python 会实行将 "旧事ID是:%s" decode 为 unicode 字符串,而默许 decode 时的编码是 ascii 无法 decode "旧事ID是:%s",以是报错。

测实验证:

>>> "旧事ID是:%s" % u2
Traceback most recent call last:
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: ascii codec cant decode byte 0xe6 in position 0: ordinal not in range128
>>> "ID is :%s" % u2
uID is :2
>>>

u 后是两个 unicode 字符串中断款式话,没题目 :

return HttpResponseu"旧事ID是:%s" % u2

>>> u"旧事ID是:%s" % u2
u\u65b0\u95fbID\u662f:2
>>>

换 python3 就没迷惑了

python2 的str是反人类直觉的

加上u表现字符串是unicode编码的unicode string。而你文件中指定了utf-8,便是最下面一行代码。以是中文就变成了utf-8编码的byte string. 以是和news_id衔接的时分会报错。由于unicode string和byte string是不克不及在一同混用的

(看完/读完)这篇文章有何感想! 亿万先生注册平台的分享…

发表评论

姓名 *
电子邮件 *
站点