python2和python3中的编码问题

开始拾起python,准备使用python3, 造轮子的过程中遇到了编码的问题,又看了一下python3和python2相比变化的部分。

首先说个概念:

 unicode:在本文中表示用4byte表示的unicode编码,也是python内部使用的字符串编码方式。

  

utf-8:在本文中指最少1byte表示的unicode编码方式

我在使用

if isinstance(key,unicode):

    key= key.encode(‘utf-8‘)

的时候,发现key值被转成了b‘foo‘,b‘bar‘ 这种类型。于是查了一下。

对于python2,内置的字符串类型有str和unicode。比如‘abc‘是str,u‘你好‘则是unicode。

python3里没有预定义unicode类型,内置的字符串就是str,因此使用isinstance(key,unicode)的时候会报错,python3 renamed the unicode type to str,the old str type has been replaced by bytes。

对于python2和python3下的encode如下

python3:

python2:

可以看到python3编码后的格式变成了bytes类型。

另一个关于字典里items和iteritems的变化也要注意:

python docs里说:

dict.items(): Return a copy of the dictionary’s list of (key, value) pairs.

dict.iteritems(): Return an iterator over the dictionary’s (key, value) pairs.

在python3里移除了iteritems方法,使用items()代替它返回一个view,which is pretty much like iterator,即items()就返回一个类似集的容器对象,而不是一个列表,如果想要返回一个列表需要list(dict.items()).

时间: 2024-12-24 21:30:45

python2和python3中的编码问题的相关文章

Python2 和 Python3 中默认编码的差异

最近在使用 Python3.4 做一些脚本实现,发现对于编码的处理上和 Python2.6 有很大的不同,就此机会把相关知识做个梳理,方便需要的时候查阅. 先说下概念和差异: 脚本字符编码:就是解释器解释脚本文件时使用的编码格式,可以通过 # -\*- coding: utf-8 -\*- 显式指定解释器字符编码:解释器内部逻辑过程中对 str 类型进行处理时使用的编码格式Python2 中默认把脚步文件使用 ASCII 来处理(历史原因请 Google)Python2 中字符串除了 str 还

一篇文章助你理解Python3中字符串编码问题

前几天给大家介绍了unicode编码和utf-8编码的理论知识,以及Python2中字符串编码问题,没来得及上车的小伙伴们可以戳这篇文章:浅谈unicode编码和utf-8编码的关系和一篇文章助你理解Python2中字符串编码问题.下面在Python3环境中进行代码演示,分别Windows和Linux操作系统下进行演示,以加深对字符串编码的理解. 在Python2的Python文件的文件头往往会声明字符的编码格式,通过会使用代码"#-*- coding -*-"作为编码声明,如下图所示

python3中的编码

python2字符串编码存在的问题: 使用 ASCII 码作为默认编码方式,对中文处理不友好 把字符串分为 unicode 和 str 两种类型,将unicode作为唯一内码,误导开发者 python3中默认编码方式修改为utf-8. 在存储和显示上,python3使用文本字符和二进制数据进行区分,更加明确和清晰. 文本字符使用str类型表示,str 能表示 Unicode 字符集中所有字符,而二进制数据使用bytes类型表示. str与bytes之间的转换 一种方式 # bytes objec

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

有关python2与python3中关于除的不同 python中2版本与3版本关于除的处理还是有一些差异的. 在python 2.7.15中除(/)是向下取整的,即去尾法. 123/10 # 结果 12 128/10 # 结果 12 在python 3中除(/)是相对于2版本精确了一些,例如: print(123/10) # 结果 12.3 原文地址:https://www.cnblogs.com/ZN-225/p/10574748.html

python2 与python3中最大的区别(编码问题bytes&str

1,在python2.x 中是不区分bytes和str类型的,在python3中bytes和str中是区分开的,str的所有操作bytes都支持 python2 中 >>> s = "abcdefg" >>> b = s.encode()    #或者使用下面的方式 >>> b = b"abcdefg">>> type(b)<type 'str'> python3中     #str

python3中的编码与解码原理

先看代码 >>> a = '中文' >>> a '中文' >>> print(a) 中文 >>> b = 'English' >>> b 'English' >>> print(b) English 解释编码和解码的过程 >>> aa = a.encode('utf-8') >>> aa b'\xe4\xb8\xad\xe6\x96\x87' >>&g

Python2和Python3中print的不同点

在Python2和Python3中都提供print()方法来打印信息,但两个版本间的print稍微有差异 主要体现在以下几个方面: 1.python3中print是一个内置函数,有多个参数,而python2中print是一个语法结构: 2.Python2打印时可以不加括号:print 'hello world', Python3则需要加括号   print("hello world") 3.Python2中,input要求输入的字符串必须要加引号,为了避免读取非字符串类型发生的一些行为

python3中的编码问题

一提到编码,我们脑子里就会想到unicode, utf-8 ,gbk 等类型的编码. 但事实上,unicode和utf-8,gbk并不是同一级别的代码. python3中,unicode是内存里统一使用的编码,内存里所有的数据(比如str对象)都是用unicode编码的. 可以看到,添加u前缀以后,str对象没变化,说明原本就是unicode 从unicode编码转换成别的类型的编码,这个过程叫编码 (encode) 从别的类型的编码转换为unicode,这个过程叫解码 (decode) 由此你

每日一读:《关于python2和python3中的range》

官网原话是这么说的:In many ways the object returned by range() behaves as if it is a list, but in fact it isn't. It is an object which returns the successive items of the desired sequence when you iterate over it, but it doesn't really make the list, thus sav