关于python2中的unicode和str以及python3中的str和bytes
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'> #为啥结果不一样
关于python2中的unicode和str以及python3中的str和bytes的更多相关文章
- Python “No module named” 以及在Python2中可以导入,但在python3中却出现的原因
Python “No module named” 以及在Python2中可以导入,但在python3中却出现的原因 原因之1: 例如有这样的一个包和它的模块: Test __init__.py Mod ...
- 详解:Python2中的urllib、urllib2与Python3中的urllib以及第三方模块requests
在python2中,urllib和urllib2都是接受URL请求的相关模块,但是提供了不同的功能.两个最显著的不同如下: 1.urllib2可以接受一个Request类的实例来设置URL请求的hea ...
- Python2中的urllib、urllib2和 Python3中的urllib、requests
目录 Python2.x中 urllib和urllib2 常用方法和类 Python3.x中 urllib requests Python2.x中 urllib和urllib2 urllib 和 ur ...
- [Python3 填坑] 012 字典的遍历在 Python2 与 Python3 中区别
目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 Python2 中字典的遍历 2.2 Python3 中字典的遍历 2.3 结论 1. print( 坑的信息 ) 挖坑时间:2019/ ...
- python中一些有用的函数------持续更新中
strip() 函数 用于移除字符串头尾指定的字符(默认为空格或换行符)或字符序列. str2 = " Runoob " # 去除首尾空格 print (str2.strip()) ...
- Python3中的运算符
一.Python3中的运算符 强调这是Python3中的运算符 + 加法 - 减法 * 乘法 / 除法 // 整除,只要整数部分 ** 幂运算 % 取余数 ...
- Python3中变量作用域nonlocal的总结
最近,在工作中踩到了一个关于Python3中nonlocal语句指定的变量作用域的坑.今天趁周六休息总结记录一下. 众所周知,Python中最常见的作用域定义如下: 但是,为了更加方便地在闭包函数 ...
- python2和python3中str,bytes区别
python2中,有basestring.str.bytes.unicode四种类型 其中str == bytes ,basestring = (str,unicode) >>> i ...
- python2中的unicode()函数在python3中会报错:
python2中的unicode()函数在python3中会报错:NameError: name 'unicode' is not defined There is no such name in P ...
随机推荐
- odoo12新特性: 会计改进
改进分析会计 分析会计层级结构 分析分配 分析分录增加了表格视图 ============== SPECIFICATIONS ============== a. Hierarchy - Cr ...
- iOS语言本地化,中文显示
尽管一直相信xcode肯定提供有语言本地化的设置地方,可是一直也没凑着去改.非常多的汉化,还是使用代码去控制:比方navagition的return使用代码改动为"返回"! 近期在 ...
- session的两个小案例
学完了session,写两个小案例加深一下对session的巩固. 1. 用户登陆案例 登陆html页面提交后,将参数带给处理登陆的servlet,该servlet将获得登陆的用户名和密码,并将这些信 ...
- 【POJ 2400】 Supervisor, Supervisee(KM求最小权匹配)
[POJ 2400] Supervisor, Supervisee(KM求最小权匹配) Supervisor, Supervisee Time Limit: 1000MS Memory Limit ...
- win7-vs2012下安装.net frame work 的过程
第一, vs和.net的对应关系大致如下 vs2010----.net framework 4.0 vs2012----.net framework 4.5 vs2015----.net frame ...
- python 的三元表达式
python中的三目运算符不像其他语言 其他的一般都是 判定条件?为真时的结果:为假时的结果 如 result=5>3?1:0 这个输出1,但没有什么意义,仅仅是一个例子. 而在python中的 ...
- member access within misaligned address 0x000000000031 for type 'struct ListNode', which requires 8 byte alignment
在做LeetCode的two sum题目的时候,提交代码遇到了如题的runtime error,后来在一篇博客上看到了解决方法. 现有如下结构体: struct ListNode { int val; ...
- 从零开始学android -- notification通知
目前有三种通知 第一种是普通通知 看看效果 布局什么的太简单了我就不放在上面了给你们看核心的代码就行了 里面的 int notificationID = 1; //设置点击通知后的意图 Inten ...
- android shape的用法总结
参考代码: <shape xmlns:android="http://schemas.android.com/apk/res/android" > <corner ...
- Android之——清理手机SD卡缓存
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/47375595 眼下,市场上非常多Android手机软件都具有清理SD卡缓存的功能, ...