python2中的unicode和str 与 python3中的str和bytes

转载于 https://www.cnblogs.com/yangmingxianshen/p/7990102.html,感谢!

python3有两种表示字符序列的类型:bytes和str。前者的实例包含原始的8位值;后者的实例包含Unicode字符。

python2中也有两种表示字符序列的类型,分别叫做str和unicode。与python3不同的是,str的实例包含原始的8位值而unicode的实例,则包含Unicode字符

上面两句话我特别不懂,所以文章后面就下是希望为了把上面两句话弄懂。

 

看几个例子:

复制代码
#在python2中
>>> type('x'.decode('utf-8'))
<type 'unicode'>   #为啥不是二进制了,字符串还能解码?再怎么解

#在python3中
>>> type(‘x’.decode(‘utf-8’)) #这才是正常的吗!
Traceback (most recent call last):
File “<stdin>”, line 1, in <module>
AttributeError: ‘str’ object has no attribute ‘decode’ #字符串怎么解,本来就没有吗

复制代码

 

首先这个就是Python语言本身的问题,因为在Python2的语法中,默认的str并不是真正意义上我们理解的字符串,而是一个byte数组,或者可以理解成一个纯ascii码字符组成的字符串,与python3中的bytes类型的变量对应,而真正意义上通用的字符串则是unicode类型的变量,它与Python3中的str变量对应本来应该用作byte数组的类型却用来做字符串,你说乱不乱,之所以这样做是为了与之前的程序保持兼容。

 

在Python2中,作为两种类型的字符序列,str与unicode需要转换,它们是这样转换的.

str——decode方法——》unicode——encode方法——》str

在python3中可以这样对应这转换,配合上面的图,也许会好理解一点。

byte——decode(解码)方法——》str——>encode(编码)方法——》byte

复制代码
#在python2中
>>> type('x')
<type 'str'>                            

>>> type(‘x’.decode(‘utf-8’))
<type ‘unicode’>

>>> type(u’x’.encode(‘utf-8’))
<type ‘str’>

#在python3中
>>> type(x)
<class ‘str’>

>>> type(b’x’)
<class ‘bytes’>>>> type(b’x’.decode(‘utf-8’))
<class ‘str’>

  >>> type('x'.encode('utf-8'))
  <class 'bytes'>

复制代码

还有就是隐式的转换,当一个unicode字符串和一个str字符串进行连接的时候,会自动将str字符串转换成unicode类型然后再连接,而这个时候使用的编码方式则是系统所默认的编码方式。python2默认的是ASCII,python3默认的是utf-8。

复制代码
#在python2中
>>> x = u'喵'
>>> x
u'\u55b5'  
>>> type(x)
<type 'unicode'>

#在python3中
>>> x = u’喵’
>>> x
‘喵’
>>> type(x)
<class ‘str’>

#为啥结果不一样

复制代码

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python 3,我们需要理解编码和解码的概念以及Unicodebytes之间的转换。 Unicode是一种编码规范,它包括了世界上几乎所有字符的映射关系。它的目的是为了实现全球文字的统一编码,使得不同语言和符号都可以在计算机表示和处理。 在Python 3,字符串是使用Unicode编码表示的,这意味着字符串可以包含任意字符和符号。当我们在编写Python代码时,可以直接使用Unicode字符,不需要做额外的编码处理。 然而,计算机实际上是通过字节(byte)来存储和传输数据的,所以我们需要将Unicode字符转换为bytes类型才能进行存储和传输。 在Python 3,我们可以使用encode()方法将Unicode字符串编码为bytes。例如,可以使用UTF-8编码将Unicode字符串编码为字节,如:bytes_data = str_data.encode('utf-8')。 相反地,当我们从外部来源(如文件、网络)获取到bytes类型的数据时,我们需要将其解码为Unicode字符串才能进行处理。我们可以使用decode()方法将bytes解码为Unicode字符串。例如,可以使用UTF-8解码将字节解码为Unicode字符串,如:str_data = bytes_data.decode('utf-8')。 需要注意的是,编码和解码时使用的编码名称必须与数据的实际编码一致,否则会导致乱码问题。 总而言之,Python 3编码和解码涉及将Unicode字符串转换为bytes以及将bytes解码为Unicode字符串的过程。通过使用encode()和decode()方法,我们可以在不同的编码方案之间进行转换,以满足不同的应用需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值