Python知识点-py2和py3编码

编码大小支持语言
ASCII 1个字节 英文
Unicode 2个字节(生僻字4个) 所有语言
UTF-8 1-6个字节,英文字母1个字节,汉字3个字节,生僻字4-6个字节 所有语言

py2编码:包含2种类型str和unicode, str相当于bytes, unicode 相当于str 

python 2默认编码为ASCII,所以出现中文时会出现报错,那是一位ASCII没有包括中文。

# 解决方法一:
import sys
reload(sys)
sys.setdefaultencoding('utf-8')

# 解决方法二:
#coding:utf8

# 解决方法三:
#-*- coding:utf-8 -*-

 

str是unicode这个字符串经过编码(utf8,gbk等)后的字节组成的序列,unicode才是真正意义上的字符串

#str格式
>>> a='高兴'
>>> a
'\xe9\xab\x98\xe5\x85\xb4'

#unicode
>>> a=u'高兴'
>>> a
u'\u9ad8\u5174'
#Python 2 悄悄掩盖掉了 byte 到 unicode 的转换,让程序在处理 ASCII 的时候更加简单

>>> print(u'nihao'+'gaoxing')
nihaogaoxing

#在处理非ASSII内的字符相加时,会出现UnicodeDecodeError
>>> print(u'nihao'+'高兴')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe9 in position 0: ordinal not in range(128)

 

unicode 和str 转换,

 

py3编码:包含str和byte , “str” 类型存储的是一个 unicode, “bytes” 类型存储的是 byte,也可以通过一个 b 前缀来制造 byte 

python 3默认编码为UTF-8

Python 3最重要的新特性大概要算是对文本和二进制数据作了更为清晰的区分。文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示。Python 3不会以任意隐式的方式混用str和bytes,正是这使得两者的区分特别清晰。你不能拼接字符串和字节包,

 

py3时:
a="中国" 和a=u"中国" 是一个意思,都表示str类型unicode存储类型
c=b"good" 表示str类型bytes存储类型

py2时:
a="中国" 和a=b"中国"  是一个意思,表示str类型bytes存储类型
a=u"中国"  表示str类型unicode存储类型

posted @ 2018-12-18 17:34  gaoxing1  阅读(351)  评论(0编辑  收藏  举报