本节课主要就是复习上节课内容,内容不多
*一个比较有意思的现象
>>>s='中'
>>>type(s)
>>>unicode(s,encoding='ascii') 出错
>>>unicode(s) 出错
>>>unicode(s,encoding='utf-8')
出错,为什么?
>>>s='中'
>>>s
'\xd6' 只有一个字节,不是一个合法经utf-8编码后的byte-string
>>>s1=u'中'
>>>s2=s1.encode('utf-8')
>>>type(s2)
>>>s
'\xd6'
>>>unicode(s2,encoding='utf-8')
u'\xd6' 这样就可以
>>>s='中'
>>>unicode(s,encoding='latin-1')
u'\xd6' 可见python默认编码方式不是utf-8,是latin-1
*编码和解码方式要一致
二者引号前是否有前缀u是书写,表示时的表象,str与unicode更本质的区别是str表示8位文本(8-bit string)和二进制数据。unicode表示Unicode文本(Unicode string)。str对象是一个"byte序列"(sequence of bytes );而unicode对象是"character序列"(sequence of characters),也可理解为sequen
ce of code-points。 character或其在Unicode中的表示形式code point只是概念上的东西。计算机存储,传输信息需要以byte形式进行,因此需要对unicode对象进行编码
*前面加u表示unicode string,\x加两位16进制代表code point,\u加四位十六进制,\U加八位十六进制
*在python2.7源代码中使用非ascii字符,必须要声明把encoding改成utf-8,即# - * -coding:utf-8 - * -,python3不需要,python3默认encoding就是utf-8
虽然前面讲到了.encode()和.decode()方法,unicode()内置函数。但是你在真正写程序的时候你不用调用这些函数和方法,而是应该使用codecs的模块
*import codecs自己去学习下PPT,实验一做题要用到
(讲的很快,但是2与3的区别一定会考)
不再有unicode类型,Python3.5中的str类型就相当于Python 2.7中的unicode类型。类型str变成了bytes(存储byte串),unicode则变成了str,默认编码由ascii变成了utf-8
*因此str对象没有decode()方法了,bytes有decode()方法
*定义byte时前面要加b,以提醒这是个字节序列
(这个不考,自己看看)
sys.stdin.encoding sys.stdout.encoding
sys.getdefaultencoding()
可以查看当你的unicode函数不指定encoding的时候,它使用什么encoding
就是gbk的别名,GB18030和GB2312自己回去看看,应该不考
编辑于2020-4-5
修改于2020-4-26 9:19