Python2和Python3在字符串编码上是有明显的区别。

在Python2中,字符串无法完全地支持国际字符集和Unicode编码。为了解决这种限制,Python2对Unicode数据使用了单独的字符串类型。要输入Unicode字符串字面量,要在第一个引号前加上'u'。Python2中普通字符串实际上就是已经编码(非Unicode)的字节字符串。

在Python3中,不必加入这个前缀字符,否则是语法错误,这是因为所有的字符串默认已经是Unicode编码了。

$ python2实例:

>>> '张三'  #python2 会自动将字符串转换为合适编码的字节字符串
'\xe5\xbc\xa0\xe4\xbf\x8a' #自动转换为utf-8编码的字节字符串

>>> u'张三' #显式指定字符串类型为unicode类型, 此类型字符串没有编码,保存的是字符在unicode字符集中的代码序号
u'\u5f20\u4fca'

>>> '张三'.encode('utf-8')  #python2 已经自动将其转化为utf-8类型编码,因此再次编码(python2会将该字符串当作用ascii或unicode编码过)会出现错误。
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe5 in position 0: ordinal not in range(128)

>>> '张三'.decode('utf-8')  #python2 可以正常解码,返回的字符串类是无编码的unicode类型
u'\u5f20\u4fca'

>>> b'张三'   # ‘张三' 已被python2转换为utf-8编码,因此已为字节字符串
'\xe5\xbc\xa0\xe4\xbf\x8a'

>>> print '张三'
张三

>>> print u'张三'
张三

>>> print b'张三'
张三

$ python3实例:

>>> '张三' #python3的字符串默认为unicode格式(无编码)
'张三'

>>> u'张三' #由于默认为unicode格式,因此字符串不用像python2一样显式地指出其类型,否则是语法错误。
File "<stdin>", line 1
u'张三'
^
SyntaxError: invalid syntax

>>> type('张三') #python3中文本字符串和字节字符串是严格区分的,默认为unicode格式的文本字符串
<class 'str'>

>>> '张三'.decode('utf-8') #因为默认的文本字符串为unicode格式,因此文本字符串没有decode方法
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'str' object has no attribute 'decode'

>>> '张三'.encode('utf-8') #将文本字符串编码,转换为已编码的字节字符串类型
b'\xe5\xbc\xa0\xe4\xbf\x8a'

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

>>> print ('张三'.encode('utf-8')) #对于已编码的字节字符串,文本字符串的许多特性和方法已经不能使用。
b'\xe5\xbc\xa0\xe4\xbf\x8a'

>>>print ('张三'.encode('utf-8'))
b'\xe5\xbc\xa0\xe4\xbf\x8a'

>>> print ('张三'.encode('utf-8').decode('utf-8'))  #必须将字节字符串解码后才能打印出来
张三

最新文章

  1. Python 之作用域和名字空间
  2. VCF (Variant Call Format)格式详解
  3. JMeter学习-011-JMeter 后置处理器实例之 - 正则表达式提取器(三)多参数获取进阶引用篇
  4. Hibernate,JPA注解@OneToMany_Set
  5. 最全的CMD命令
  6. 使用多个Worker的时候Odoo的系统日志配置
  7. 数据结构-------单链表(C++)
  8. mysql创建自定义函数与存储过程
  9. Android 中的MVC与数据流动
  10. Nvidia和Google的AI芯片战火蔓延至边缘端
  11. Flask 系列之 LoginManager
  12. windows 基础命令小集
  13. CentOS 7 安装SVN服务端
  14. Asp.net Mvc post表单提交多个实体模型
  15. P2473 [SCOI2008]奖励关
  16. (转载)Navicat Premium 12.1.16.0安装与激活
  17. js判断当前页面是顶级窗口
  18. (转)BT1120接口及协议
  19. .net core web api swagger 配置笔记
  20. UVALive-2966 King&#39;s Quest(强连通+二分图匹配)

热门文章

  1. day6、Linux下如何找出7天以前的文件删除
  2. models中的pk主键用法
  3. NBUT 1217 Dinner
  4. 查询linux版本命令
  5. HTML: width,height
  6. java与数据库
  7. idea的mybatis的xml文件总是报警告SQL dialect is not configured
  8. 【adb】连接BlueStacks
  9. 实现WebSocket和WAMP协议的开源库WampSharp
  10. Spark源码剖析(五):Master原理与源码剖析(下)