python2和python3在处理字符串上的区别详解


Posted in Python onMay 29, 2019

python2和python3对于字符串的处理有很大的区别

熟悉了python2的写法用python3时真的会遇到很多问题啊……

区别

python2中有一种类型叫做unicode型,例

type(u"a") => str型
type("a".decode('utf8')) => unicode型

两者返回的类型都是unicode型

而在python3中,所有的字符串都是unicode,所以就不存在单独的unicode型,全部都是字符串型

type(u"a") => str型
type("a".decode('utf8')) => 报错,python3不能这样写

但是python3中多处一种字符串

type(b'132') => byte型

而在python2中这样写就会报错

所以显而易见,decode和encode的使用也会有很大的区别

python2中的decode是将str型转换为unicode型

python3中的decode是将byte型转换为str型

使用

在使用python3写爬虫时,有时候会遇到这样的错误

'gbk' codec can't encode character '\u30fb' in position 0: illegal multibyte sequence

遇到这样的错误就和上面的编码问题连系起来了

你会发现,明明自己设置的编码是utf8,怎么会报一个gbk的错误??

这个问题可能会在两个地方出现(输出时,写入文件时),其实这里设置的编码并没有问题,问题出在python3的字符串中,像上面说的,python3默认所有字符串都是unicode型,在面对字符串时,会首先按照unicode解析,自然会报错

那么,我们来转换一下编码(假设a是一个gbk编码的数据流)

"a".decode('gbk')

将字符串按照gbk规则解码

会发现依旧报错,明明已经改为gbk了啊……不着急,再进行一次

"a".decode('gbk').encode('utf8').decode('utf8')

为什么写的这么长……就像上面说的,decode是将byte型转为str型,而encode是将str型转换为byte型,所以再进行一次encode,decode就能够使得字符串转换编码格式

但是当你输出时,你会发现还是有问题

解决

我们回到开始

不输出我们想要的字符串,发现没有问题……问题出在哪?

没错,是print(),print在输出时会默认其中的字符时unicode编码的字符串,而我们输入了一个gbk编码的字符串,所以就会出错,所以,解决方法就是,不使用print……

但是print的使用有时候是不可避免的,所以在decode时加上一个ignore

"a".decode('gbk',errors='ignore')

此外,在打开或写入文件时遇到的话,就需要加上encoding参数

with open("1.txt",'r',encoding='utf8') as a:

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
python模拟登陆阿里妈妈生成商品推广链接
Apr 03 Python
跟老齐学Python之画圈还不简单吗?
Sep 20 Python
解决pyqt中ui编译成窗体.py中文乱码的问题
Dec 23 Python
Python3爬虫之urllib携带cookie爬取网页的方法
Dec 28 Python
在Python中使用Neo4j的方法
Mar 14 Python
Django中使用CORS实现跨域请求过程解析
Aug 05 Python
python创建与遍历List二维列表的方法
Aug 16 Python
在Python中使用filter去除列表中值为假及空字符串的例子
Nov 18 Python
python shutil文件操作工具使用实例分析
Dec 25 Python
读取nii或nii.gz文件中的信息即输出图像操作
Jul 01 Python
利用python进行文件操作
Dec 04 Python
python获取对象信息的实例详解
Jul 07 Python
python TF-IDF算法实现文本关键词提取
May 29 #Python
详解Python odoo中嵌入html简单的分页功能
May 29 #Python
Python 3.8中实现functools.cached_property功能
May 29 #Python
Python3+Pycharm+PyQt5环境搭建步骤图文详解
May 29 #Python
Python安装与基本数据类型教程详解
May 29 #Python
python登录WeChat 实现自动回复实例详解
May 28 #Python
Python语言进阶知识点总结
May 28 #Python
You might like
ThinkPHP验证码和分页实例教程
2014/08/22 PHP
php异常处理捕获错误整理
2019/09/23 PHP
js 判断checkbox是否选中的操作方法
2012/11/09 Javascript
jquery 动态创建元素的方式介绍及应用
2013/04/21 Javascript
如何使用jQuery技术开发ios风格的页面导航菜单
2015/07/29 Javascript
jquery插件jquery.beforeafter.js实现左右拖拽分隔条对比图片的方法
2015/08/07 Javascript
jQuery实现手机自定义弹出输入框
2016/06/13 Javascript
angularjs实现天气预报功能
2020/06/16 Javascript
jQuery封装animate.css的实例
2018/01/04 jQuery
bing Map 在vue项目中的使用详解
2018/04/09 Javascript
JavaScript对象的浅拷贝与深拷贝实例分析
2018/07/25 Javascript
vue input输入框关键字筛选检索列表数据展示
2020/10/26 Javascript
npm的lock机制解析
2019/06/20 Javascript
前端Electron新手入门教程详解
2019/06/21 Javascript
layui添加动态菜单与选项卡
2019/07/26 Javascript
详解node.js 事件循环
2020/07/22 Javascript
JavaScript实现鼠标经过表格某行时此行变色
2020/11/20 Javascript
python关闭windows进程的方法
2015/04/18 Python
Python中多线程的创建及基本调用方法
2016/07/08 Python
python实现雨滴下落到地面效果
2018/06/21 Python
Python格式化日期时间操作示例
2018/06/28 Python
Python测试网络连通性示例【基于ping】
2018/08/03 Python
详解django2中关于时间处理策略
2019/03/06 Python
Python利用sqlacodegen自动生成ORM实体类示例
2019/06/04 Python
使用python求解二次规划的问题
2020/02/29 Python
PyTorch中clone()、detach()及相关扩展详解
2020/12/09 Python
澳大利亚领先的亚麻品牌:Bed Threads
2019/12/16 全球购物
瑞典在互联网上最大的宠物商店:Animail
2020/10/31 全球购物
颇特女士香港官网:NET-A-PORTER香港
2021/03/08 全球购物
linux面试题参考答案(7)
2014/07/24 面试题
电焊工岗位职责
2014/03/06 职场文书
教师对照四风自我剖析材料
2014/09/30 职场文书
2016年小学“我们的节日·中秋节”活动总结
2016/04/05 职场文书
请假条应该怎么写?
2019/06/24 职场文书
python如何做代码性能分析
2021/04/26 Python
MySQL面试题讲解之如何设置Hash索引
2021/11/01 MySQL