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'))  #必须将字节字符串解码后才能打印出来
张三

Python2和Python3中的字符串编码问题解决的更多相关文章

  1. Python3中转换字符串编码

    在使用subprocess调用Windows命令时,遇到了字符串不显示中文的问题,源码如下:#-*-coding:utf-8-*-__author__ = '$USER' #-*-coding:utf ...

  2. Python2和Python3中urllib库中urlencode的使用注意事项

    前言 在Python中,我们通常使用urllib中的urlencode方法将字典编码,用于提交数据给url等操作,但是在Python2和Python3中urllib模块中所提供的urlencode的包 ...

  3. [Python3 填坑] 012 字典的遍历在 Python2 与 Python3 中区别

    目录 1. print( 坑的信息 ) 2. 开始填坑 2.1 Python2 中字典的遍历 2.2 Python3 中字典的遍历 2.3 结论 1. print( 坑的信息 ) 挖坑时间:2019/ ...

  4. Python3中的字符串函数学习总结

    这篇文章主要介绍了Python3中的字符串函数学习总结,本文讲解了格式化类方法.查找 & 替换类方法.拆分 & 组合类方法等内容,需要的朋友可以参考下. Sequence Types ...

  5. Mapreduce中的字符串编码

    Mapreduce中的字符串编码 $$$ Shuffle的执行过程,需要经过多次比较排序.如果对每一个数据的比较都需要先反序列化,对性能影响极大. RawComparator的作用就不言而喻,能够直接 ...

  6. 有关python2与python3中关于除的不同

    有关python2与python3中关于除的不同 python中2版本与3版本关于除的处理还是有一些差异的. 在python 2.7.15中除(/)是向下取整的,即去尾法. 123/10 # 结果 1 ...

  7. python2和python3中range的区别

    参考自 python2和python3中的range区别 - CSDN博客 http://blog.csdn.net/xiexingshishu/article/details/48581379 py ...

  8. python2和python3中filter函数

    在python2和python3中filter是不同的,其中在python2中filter返回的是一个list,可以直接使用 >>> a = [1,2,3,4,5,6,7] > ...

  9. Python2和Python3中列表推导式的不同

    Python2和Python3中列表推导式的不同 python2 >>> x = 'my girl' >>> lst = [x for x in 'hello'] ...

随机推荐

  1. 一个js的动画,以前以为只有flash可以实现

    11年刚干这行的时候,看到这种什么百叶窗的动画,以为都是flash实现的,最近突然灵光一闪,想到了用js实现(虽然我不是做前端的,本人做.net).代码虽然实现了,但是比较乱,先上个图: 代码主要就是 ...

  2. PTA题---求两个有序序列中位数所体现的思想。

    ---恢复内容开始--- 近日,在做PTA题目时,遇到了一个这样的题,困扰了很久.题目如下:已知有两个等长的非降序序列S1, S2, 设计函数求S1与S2并集的中位数.有序序列A​0​​,A​1​​, ...

  3. WPF水珠效果按钮组

    效果图 相关知识 这部分基本就是废话,网上都能找到,我只不过是整理了以下.建议先不看,用到的时候可以回来看看 贝塞尔曲线 先来看两组图,有助于理解什么是贝塞尔曲线(图片取自维基百科,参考链接1) 二次 ...

  4. java.util.ConcurrentModificationException 异常问题详解

    环境:JDK 1.8.0_111 在Java开发过程中,使用iterator遍历集合的同时对集合进行修改就会出现java.util.ConcurrentModificationException异常, ...

  5. db2 update 异常

    报错: -错误的sql语句:update Persons SET FirstName = 'Fred' WHERE id_P = 1com.ibm.db2.jcc.am.SqlException: O ...

  6. PHP去除unicode续:json_encode之后,仅仅有文字,数字不见了的解决方法

    接前文.http://blog.csdn.net/yanzi1225627/article/details/44985487 这么处理了一段时间.确实没发现问题.但近期发现了一个bug.比方输入&qu ...

  7. Android数据加密概述及多种加密方式 聊天记录及账户加密 提供高质量的数据保护

    Android数据加密概述及多种加密方式 聊天记录及账户加密 提供高质量的数据保护 数据加密又称password学,它是一门历史悠久的技术,指通过加密算法和加密密钥将明文转变为密文.而解密则是通过解密 ...

  8. String 经常用法最优算法实现总结 (二)

    1. String getOrderedString(boolean isDuplicated, String - str) 说明: Orders all characters in the inpu ...

  9. java文本编辑器v2.0 图形用户界面

    package 文本编辑器; import java.awt.BorderLayout; import java.awt.Color; import java.awt.Dimension; impor ...

  10. RESTful 的通俗解释

    转载自知乎,通俗易懂的讲解了RESTful链接:https://www.zhihu.com/question/28557115/answer/48094438 REST -- REpresentati ...