1 版本差异概览

1.1 Python 2.X:

str(用于8位文本和二进制数据)

unicode(用于宽字符文本)

在Python2中,通用的str类型填补了二进制数据的这一角色(特指python3中的bytes类型),因为字符串也只是字节的序列(单独的unicode类型处理宽字符串)。

在Python2中,为了兼容性而使用b'xxx',但是它与'xxx'是相同的,并且产生一个str,并且,bytes只是str的同义词。在Python3中,这二者都解决了bytes类型之间的差异。Python2中的u'xxx'和 U'xxx' Unicode字符串常量形式在Python3中已经取消了,而是使用'xxx'替代,因为所有的字符串都是Unicode,即便它们包含所有的ASCII字符。

1.2 Python 3.X:

str(用于Unicode文本,包括ASCII)

bytes(用 于带有绝对字节值的二进制数据)

bytearray(bytes的一种可变的形式)

bytes是一个不可改变的字符序列。

Python 3.0 bytes对象是较小整数的一个序列,其中每个整数都在0到255之间。在python3中bytes主要用于处理那些没有针对每个任意文本格式都编码的raw字节数据(图像和声音文件,以及用来与设备接口的打包数据,或者你想要用python的struct模块处理的C程序)。Python3的bytes类型支持几乎str类型所做的所有相同操作:这包括字符串方法、序列操作,甚至re模块模式匹配。

bytearray是bytes类型的一个变体,它是可变的并且支持原处修改。

它支持str和bytes所支持的常见的字符串操作,以及和列表相同的很多原处修改操作(例如,append和extend方法, 以及向索引赋值)。

1.3文件分类

python3中的文件I/O一般分为两类:文本文件和二进制文件

使用建议:

1.如果正在处理图像文件,其他程序创建的、而且必须解压的打包数据,或者一些设 备数据流,则使用bytes和二进制模式文件处理它更合适。如果想要更新数据而不 在内存中产生其副本,也可以选择使用bytearray。

2.如果要处理的内容实质是文本的内容,例如程序输出、H T M L、国际化文本或 CSV或XML文件,可能要使用str和文本模式文件。

2 类型转换

Python 3.0下的类型转换:

• str.encode()和bytes(S, encoding)把一个字符串转换为其raw bytes形式,并且

在此过程中根据一个str创建一个bytes。

• bytes.decode()和str(B, encoding)把raw bytes转换为其字符串形式,并且在此

过程中根据一个bytes创建一个str。

>>> S = 'eggs'

>>> S.encode()

b'eggs'

>>> bytes(S, encoding='ascii')

b'eggs'

>>> B = b'spam'

>>> B.decode()

'spam'

>>> str(B, encoding='ascii')

'spam'

3 平台默认编码

3.1 查看系统编码

python2系统编码

Python 2.7.10 (default, Jul 30 2016, 19:40:32)

[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.34)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>>

>>> import sys

>>> sys.getdefaultencoding()

'ascii'

python3系统编码

Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)

[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin

Type "help", "copyright", "credits" or "license" for more information.

>>> import sys

>>> sys.getdefaultencoding()

'utf-8'

3.2 修改系统编码

如果程序执行的过程中,遇到下面的报错信息时,可以把Python2的系统编码改为utf-8。

UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1....

#Python2的系统编码改为utf-8,一般放在文件头

import sys

reload(sys)

sys.setdefaultencoding('utf-8')

4 chardet模块

chardet是python的一个第三方库,常用于编码识别。

4.1 网页编码判断:

from urllib import request

import chardet

rawdata = request.urlopen('https://www.baidu.com/').read()

tmp = chardet.detect(rawdata)

print(tmp)

"""

{'encoding': 'ascii', 'confidence': 1.0}

confidence:检测精确度

encoding:编码形式

"""

4.2 文件编码判断

import chardet

with open('text.txt', 'rb') as f:

data = f.readline()

tmp = chardet.detect(data)

print(tmp)

"""

{'encoding': 'ascii', 'confidence': 1.0}

"""

5 源文件字符集编码声明

对于在脚本文件中编码的字 符串,python默认地使用UTF-8编码,但是,它允许我们通过包含一个注释来指明想要 的编码,从而将默认值修改为支持任意的字符集。这个注释必须拥有如下的形式,并且 在Python 2.6或Python 3.0中必须作为脚本的第一行或第二行出现:

# -*- coding: latin-1 -*-

6 pickle序列化与编码

pickle模块的Python3版本总是创建一个bytes对象

>>> import pickle

>>> pickle.dumps([1, 2, 3])

b'\x80\x03]q\x00(K\x01K\x02K\x03e.'

>>> pickle.dumps([1, 2, 3], protocol=0)

b'(lp0\nL1L\naL2L\naL3L\na.'

序列化于反序列化(在python2与python3中都生效):

>>> import pickle

>>> pickle.dump([1, 2, 3], open('temp', 'wb'))

>>> pickle.load(open('temp', 'rb'))

[1, 2, 3]

7 编码相关的其他方法

sys/locale模块中提供了一些获取当前环境下的默认编码的方法。

# coding:gbk

import sys

import locale

def p(f):

print '%s.%s(): %s' % (f.__module__, f.__name__, f())

# 返回当前系统所使用的默认字符编码

p(sys.getdefaultencoding)

# 返回用于转换Unicode文件名至系统文件名所使用的编码

p(sys.getfilesystemencoding)

# 获取默认的区域设置并返回元祖(语言, 编码)

p(locale.getdefaultlocale)

# 返回用户设定的文本数据编码

# 文档提到this function only returns a guess

p(locale.getpreferredencoding)

qpython3l手机版安装第三方库总是报错_python编码问题在此终结相关推荐

  1. python pip安装第三方库老是报错_Python使用pip安装第三方库时报错的解决方案

    报错1: PermissionError: [WinError 5] 报错2: Command... failed with error code 1 in .. 以上两种报错,解决较为简单,主要是权 ...

  2. Python在指定环境下安装第三方库的报错解决办法

    Python在指定环境下安装第三方库的报错解决办法 在python安装第三方库时,如果直接打开cmd命令提示符,并输入下列安装命令,则会默认安装在base环境下 但base环境下的包新建的虚拟环境是无 ...

  3. python pip安装第三方库老是报错_#python pip 安装dlib一直失败?#python安装dlib错误...

    #python pip 安装dlib一直失败?#python安装dlib错误 python dlib 教程2020-10-11 07:52:36人已围观 ubuntu里面怎么安装dlib 下面是在ub ...

  4. pip安装第三方库,报错 Retrying (Retry(total=4, connect=None, read=None, redirect=None)) after connection brok

    错误: 报错原因: 国外镜像源连接问题导致 解决: 改为国内镜像源下载 常用国内源: 清华:https://pypi.tuna.tsinghua.edu.cn/simple/ 阿里云:http://m ...

  5. 解决红米 10X手机USB安装apk时AS报错提示:INSTALL_FAILED_USER_RESTRICTED: Invalid apk

    解决红米 10X手机USB安装apk时AS报错提示: INSTALL_FAILED_USER_RESTRICTED: Invalid apk 我先不说多,直接说吧 1.把工程下面三个目录的文件删除 删 ...

  6. Python导入第三方库以及报错 Error..........处理办法

    目录 未导入matplotlib这样一个第三方库上网查询了一下PyCharm这个软件第三方库的导入方法: 如果不配置肯定会报错 看了网上有很多方法,博主分享一个自己用的方法并成功了: 还有就是感觉下载 ...

  7. cmake之 第三方库始终报错 /usr/bin/ld: cannot find -lxxx?

    为什么自己要添加始终?感觉很奇怪? 加载第三方库对于一个程序是很经常碰到的事情. 首先,自己应该很清楚第三方库的位置哈.将库添加到工程中. #注意:动态库简写,全称均可:静态库要全称. TARGET_ ...

  8. 项目引入js-cookie第三方库,报错问题,Vue3+TS

    报错问题:无法找到模块"js-cookie"文件声明. 1:方法一:安装下面二个库 2:方法二

  9. PyCharm安装Twisted库(报错:Microsoft Visual C++ 14.0 is required. Get it with “Build Tools for Visual Stu)

    报错信息 解决方案 先安装wheel pip install wheel 去官方找对应的版本:https://www.lfd.uci.edu/~gohlke/pythonlibs/#twisted 以 ...

最新文章

  1. 哈佛终身教授:年轻人如何做科研?
  2. Android音频播放实例
  3. C语言中单目运算符的结合方向是,C语言运算符的结合性
  4. 【学习笔记】FI-AR模块概述
  5. php smart模板,vaphp整合smart模板有关问题
  6. 【BZOJ-2938】病毒 Trie图 + 拓扑排序
  7. 中级统计师基础知识中计算机,【2014年中级统计师《统计基础理论及相关知识》预习:计算机操作系统】- 环球网校...
  8. netbeans调试_从NetBeans运行和调试WildFly Swarm应用程序
  9. 360安全浏览器兼容模式怎么设置_测试新手一定要知道:最实用的Web兼容性测试经验都在这...
  10. 百度AI开发者大会百度大脑论坛:详解“多模态深度语义理解”
  11. 会议通知|2019年全国高校大数据专业教学研讨与教师培训
  12. Selenium的定位元素
  13. 质性数据分析软件NVivo的许可
  14. 尼康d850相机参数测试软件,尼康D850 这可能是你唯一需要的单反相机
  15. 扒开系统调用的三层皮(上)
  16. 【s3.amazonaws.com】【github.com】拒绝了我们的连接请求-解决方案
  17. 设计模式——中介模式
  18. LC-3 指令集注释规范
  19. 从“挖光缆”到“剪网线”|蚂蚁金服异地多活单元化架构下的微服务体系
  20. (免费分享)基于javaweb,ssm旅游信息系统

热门文章

  1. java基础专栏—CommonApi
  2. 企业数据中心和互联网数据中心有何不同?
  3. Java实战equals()与hashCode()
  4. [Rainy开发笔记]使用RandomAccessFile实现的Tail
  5. rhel-server版安装vbox增强功能
  6. 红蓝对抗 linux内网渗透
  7. python subprocess.Popen 使用简介
  8. linux 错误 kernel panic not syncing vfs unable to mount root fs on unknown-block 0 0
  9. linux 无线网卡命令iwlist iwconfig iw
  10. linux几种常见的Shell:sh、bash、csh、tcsh、ash