Python知识点-py2和py3编码

编码大小支持语言
ASCII1个字节英文
Unicode2个字节(生僻字4个)所有语言
UTF-81-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存储类型

转载于:https://www.cnblogs.com/ghx1/p/10138614.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值