Python 2与Python 3版本和编码的对比
一、版本对比
首先要说的是,Python的版本,目前主要分为两大类:
Python 2.x的版本的,被称为Python2:是目前用的最广泛的,比如Python 2.7.3。
Python 3.x的版本的,被称为Python3:是最新的版本的,比如Python 3.1。长远来看,也算是以后的趋势。
【Python2和Python3之间的区别】
1.从Python2到Python3,很多基本的函数接口变了,甚至是,有些库或函数被去掉了,改名了
Python2和Python3,在很多基本的,最常用的函数方面,接口都变了,最典型的就要数大家最常用的print函数了。
2.第三方库的支持方面,目前来说,还是Python2支持的最好,Python3支持的不太够
Python强大的原因之一是第三方的库很多,功能很强大。
而目前很多Python的第三方的库,很多只提供Python2的。
或者是即使提供了Python3的,但是也不一定很成熟。
二、编码对比
在 Python 中,不论是 Python2 还是 Python3 中,总体上说,字符都只有两大类:
- 通用的 Unicode 字符;
- (unicode 被编码后的)某种编码类型的字符,比如 UTF-8,GBK 等类型的字符。
Python2 中字符的类型:
- str: 已经编码后的字节序列
- unicode: 编码前的文本字符
Python3 中字符的类型:
- str: 编码过的 unicode 文本字符
- bytes: 编码前的字节序列
我们可以认为字符串有两种状态,即文本状态和字节(二进制)状态。Python2 和 Python3 中的两种字符类型都分别对应这两种状态,然后相互之间进行编解码转化。编码就是将字符串转换成字节码,涉及到字符串的内部表示;解码就是将字节码转换为字符串,将比特位显示成字符。
在 Python2 中,str 和 unicode 都有 encode 和 decode 方法。但是不建议对 str 使用 encode,对 unicode 使用 decode, 这是 Python2 设计上的缺陷。Python3 则进行了优化,str 只有一个 encode 方法将字符串转化为一个字节码,而且 bytes 也只有一个 decode 方法将字节码转化为一个文本字符串。
Python2 的 str 和 unicode 都是 basestring 的子类,所以两者可以直接进行拼接操作。而 Python3 中的 bytes 和 str 是两个独立的类型,两者不能进行拼接。
Python2 中,普通的,用引号括起来的字符,就是 str;此时字符串的编码类型,对应着你的 Python 文件本身保存为何种编码有关,最常见的 Windows 平台中,默认用的是 GBK。Python3 中,被单引号或双引号括起来的字符串,就已经是 Unicode 类型的 str 了。
对于 str 为何种编码,有一些前提:
- Python 文件开始已经声明对应的编码
- Python 文件本身的确是使用该编码保存的
- 两者的编码类型要一样(比如都是 UTF-8 或者都是 GBK 等)
这样 Python 解析器才能正确的把文本解析为对应编码的 str。
总体来说,在 Python3 中,字符编码问题得到了极大的优化,不再像 Python2 那么头疼。在 Python3 中,文本总是 Unicode, 由 str 类型进行表示,二进制数据使用 bytes 进行表示,不会将 str 与 bytes 偷偷的混在一起,使得两者的区别更加明显。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或使用python能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。
相关推荐
-
python3编码问题汇总
这两天写了个监测网页的爬虫,作用是跟踪一个网页的变化,但运行了一晚出现了一个问题....希望大家不吝赐教! 我用的是python3,错误在对html response的decode时抛出,代码原样为: response = urllib.urlopen(dsturl) content = response.read().decode('utf-8') 抛出错误为 File "./unxingCrawler_p3.py", line 50, in getNewPhones content
-
快速入手Python字符编码
前言 对于很多接触Python的人而言,字符的处理和语言整体的温顺可靠相比显得格外桀骜不驯难以驾驭. 文章针对Python 2.7,主要因为3对的编码已经有了很大的改善并且实际原理一样,更改一下操作命令即可. 了解完本文,你可以轻松解决文字处理,特殊平台(Windows?)下的编码,爬虫编码等问题. 阅读建议 本文分为如下几个部分: 1.原理 2.具体操作 3.建议的使用习惯 4.疑难问题解答 如果想要了解我给出的使用习惯,可以直接跳到建议的使用习惯. 如果只想要解决相关问题可以直接跳到疑难问题
-
SQLite3中文编码 Python的实现
读取十万多条文本写入SQLite类型数据库,由于文本中存在中文字符,插入到数据库没错,取出时一直是UnicodeDecodeError,导致折腾了一天. 最后的解决方法: Python连接数据时进行如下设置: db=sqlite3.connection("...") db.text_factory=st 另为了python代码中硬编码的中文字符串不出现问题,除了在源码开始添加 # -*- coding:utf-8 -*- 设置python源码的编码为utf-8 import sys r
-
Python使用chardet判断字符编码
本文实例讲述了Python使用chardet判断字符编码的方法.分享给大家供大家参考.具体分析如下: Python中chardet 用来实现字符串/文件编码检测模板 1.chardet下载与安装 下载地址:http://pypi.python.org/pypi/chardet 下载chardet后,解压chardet压缩包,直接将chardet文件夹放在应用程序目录下,就可以使用import chardet开始使用chardet了,也可以将chardet拷贝到Python系统目录下,这样你所有的
-
Python获取系统默认字符编码的方法
本文实例讲述了Python获取系统默认字符编码的方法.分享给大家供大家参考.具体分析如下: 在Python代码中,普通字符串的编码方式与程序源文件编码方式一致的,而很多IDE在默认情况下,将程序源文件按照系统默认字符编码来保存的. 下面给出用Python获取系统默认编码的例子: #!/usr/bin/env python #coding=utf-8 """ 获取系统默认编码 """ import sys print sys.getdefaulte
-
详解Python当中的字符串和编码
字符编码 我们已经讲过了,字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节.比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295. 由于计算机是美国人发明的,因此,最早只有1
-
深入浅析Python字符编码
Python的字符串编码规则一直让我很头疼,花了点时间研究了下,并不复杂.主要涉及的内容有常用的字符编码的特点,并介绍了在python2.x中如何与编码问题作战,本文关于Python的内容仅适用于2.x,3.x中str和unicode有翻天覆地的变化,具体请查阅相关资料. 1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有英文,而单字节可以表示25
-
Python3如何解决字符编码问题详解
编码 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节.比如两个字节可以表示的最大整数是65535,4个字节可以表示的最大整数是4294967295. 由于计算机是美国人发明的,因此,最早只有127个字母被编码到计算机里,也就是大小写英文字母.数字和一些符号,这个编码表被称为ASC
-
跟老齐学Python之坑爹的字符编码
字符编码,在编程中,是一个让学习者比较郁闷的东西,比如一个str,如果都是英文,好说多了.但恰恰不是如此,中文是我们不得不用的.所以,哪怕是初学者,都要了解并能够解决字符编码问题. >>> name = '老齐' >>> name '\xe8\x80\x81\xe9\xbd\x90' 在你的编程中,你遇到过上面的情形吗?认识最下面一行打印出来的东西吗?看人家英文,就好多了 >>> name = "qiwsir" >>&g
-
Python 2与Python 3版本和编码的对比
一.版本对比 首先要说的是,Python的版本,目前主要分为两大类: Python 2.x的版本的,被称为Python2:是目前用的最广泛的,比如Python 2.7.3. Python 3.x的版本的,被称为Python3:是最新的版本的,比如Python 3.1.长远来看,也算是以后的趋势. [Python2和Python3之间的区别] 1.从Python2到Python3,很多基本的函数接口变了,甚至是,有些库或函数被去掉了,改名了 Python2和Python3,在很多基本的,最常用的函
-
python获取Linux下文件版本信息、公司名和产品名的方法
本文实例讲述了python获取Linux下文件版本信息.公司名和产品名的方法,分享给大家供大家参考.具体如下: 区别于前文所述.本例是在linux下得到文件版本信息,主要是通过pefile模块解析文件 中的字符串得到的.代码如下: def _get_company_and_product(self, file_path): """ Read all properties of the given file return them as a dictionary. @retur
-
python自动化脚本安装指定版本python环境详解
一般情况下编译安装python环境需要执行以下步骤: 下载源码包 解压源码包 安装配置 编译以及编译安装 TALK IS CHEAP, SHOW YOU MY CODE. #!/usr/bin/python #coding:utf-8 ''' date:9/2/17 18:03 PM author:lockey email:lockey@123.com desc:python自动化安装用户指定版本的python环境 ''' #导入Python的系统编程操作模块 import os #导入用来处理
-
python将图片文件转换成base64编码的方法
本文实例讲述了python将图片文件转换成base64编码的方法.分享给大家供大家参考.具体实现方法如下: import base64 f=open(r'c:\jb51.gif','rb') #二进制方式打开图文件 ls_f=base64.b64encode(f.read()) #读取文件内容,转换为base64编码 f.close() 调用方法如下: 复制代码 代码如下: <img src="R0lGODlh1wBOAPcAAAAAAP///7a4u+jq7bG1ucrN0N7g4tLU
-
解决Python中pandas读取*.csv文件出现编码问题
1.问题 在使用Python中pandas读取csv文件时,由于文件编码格式出现以下问题: Traceback (most recent call last): File "pandas\_libs\parsers.pyx", line 1134, in pandas._libs.parsers.TextReader._convert_tokens File "pandas\_libs\parsers.pyx", line 1240, in pandas._libs
-
linux安装python修改默认python版本方法
linux默认是安装了python,默认是安装python2.6.6,可能安装的版本是不能符合我们需要的python要求的.我们需要重新安装python的版本,今天演示一下安装python3 首先下载一个 wget 文件的地址 执行命令进行下载 下载完成以后进行解压,解压完成以后进行安装,执行tar -zxvf Python-3.6.1.tgz解压 cd Python-3.6.1 进入目录 ./configure --prefix=/usr/local/python3 配置python安
-
python看某个模块的版本方法
例如networkx模块 启动python命令行,输入以下两行命令 import networkx networkx.__version__ 以上这篇python看某个模块的版本方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们.
-
浅谈python下含中文字符串正则表达式的编码问题
前言 Python文件默认的编码格式是ascii ,无法识别汉字,因为ascii码中没有中文. 所以py文件中要写中文字符时,一般在开头加 # -*- coding: utf-8 -*- 或者 #coding=utf-8. 这是指定一种编码格式,意味着用该编码存储中文字符(也可以是gbk.gb2312等). 关于测试的几点注意 -------------------------------------------- 注1:代码中有中文,就要在头部指定编码方式,如果用编辑器写代码,还要注意IDE的
-
Python使用GitPython操作Git版本库的方法
GitPython 是一个用于操作 Git 版本库的 python 包,它提供了一系列的对象模型(库 - Repo.树 - Tree.提交 - Commit等),用于操作版本库中的相应对象. 1.导包 from git import * 2.初始化git仓库 CURRENT_DIR = os.path.dirname(os.path.abspath(__file__)) empty_repo = Repo.init(os.path.join(CURRENT_DIR, 'bbs')) # bbs目
-
详解用Python调用百度地图正/逆地理编码API
一.背景 (正)地理编码指的是:将地理位置名称转换成经纬度: 逆地理编码指的是:将经纬度转换成地理位置信息,如地名.所在的省份或城市等 百度地图提供了相应的API,可以方便调用.相应的说明文档如下: 正地理编码 逆地理编码 具体API的参数可以查看相应的"服务文档": 不过首次使用时需要申请,具体在控制台.申请AK的方式可参见其他文章. 二.源码 废话不多说,直接放源码.这里提供了Python调用这两个API的方法. #!/usr/bin/env python # -*- coding
随机推荐
- 一个简单的ASP.NET验证码
- Flex打开新窗口将主窗口数据传给子窗口然后返回
- Git 常用命令整理
- javascript之对系统的toFixed()方法的修正
- MS-DOS 7.10完整安装版(含图文安装程序)
- android端实现验证码随机生成功能
- iOS实现图片存在本地、再从本地获取图片的功能
- PHP数组相关函数汇总
- [PHP]实用函数7
- 安装mysql noinstall zip版
- mysql:Can't start server: can't create PID file: No space left on device
- android自定义View滑动删除效果
- php tp验证表单与自动填充函数代码
- node.js中的fs.truncate方法使用说明
- ASP运行在IIS6 500错误解决办法
- 为jQuery增加join方法的实现代码
- java中@ModelAttribute注解的作用
- Android ListView中headerview的动态显示和隐藏的实现方法
- Java中实现获取路径的方法汇总
- PHP autoload 机制详解