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队列的定义与使用方法示例
Jun 24 Python
python如何让类支持比较运算
Mar 20 Python
儿童学习python的一些小技巧
May 27 Python
python 哈希表实现简单python字典代码实例
Sep 27 Python
django多种支付、并发订单处理实例代码
Dec 13 Python
nginx搭建基于python的web环境的实现步骤
Jan 03 Python
在 Pycharm 安装使用black的方法详解
Apr 02 Python
Django中从mysql数据库中获取数据传到echarts方式
Apr 07 Python
200行python代码实现贪吃蛇游戏
Apr 24 Python
pycharm 2018 激活码及破解补丁激活方式
Sep 21 Python
Python astype(np.float)函数使用方法解析
Jun 08 Python
详解python中的异常捕获
Dec 15 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
PHP中使用数组实现堆栈数据结构的代码
2012/02/05 PHP
分享一段PHP制作的中文拼音首字母工具类
2014/12/11 PHP
php中strlen和mb_strlen用法实例分析
2016/11/12 PHP
jQuery Tips 为AJAX回调函数传递额外参数的方法
2010/12/28 Javascript
非常棒的10款jQuery 幻灯片插件
2011/06/14 Javascript
js判断一个元素是否为另一个元素的子元素的代码
2012/03/21 Javascript
jquery全选/全不选/反选另一种实现方法(配合原生js)
2013/04/07 Javascript
主页面中的两个iframe实现鼠标拖动改变其大小
2013/04/16 Javascript
jquery图片不完全按比例自动缩小的简单代码
2013/07/29 Javascript
Javascript中获取对象的原型对象的方法小结
2015/02/25 Javascript
javascript DIV实现跟随鼠标移动
2020/03/19 Javascript
js实现商品抛物线加入购物车特效
2020/11/18 Javascript
js实现目录链接,内容跟着目录滚动显示的简单实例
2016/10/15 Javascript
前端页面文件拖拽上传模块js代码示例
2017/05/19 Javascript
微信小程序 setData 对 data数据影响问题
2019/04/18 Javascript
vue改变对象或数组时的刷新机制的方法总结
2019/04/24 Javascript
快速解决layui弹窗按enter键不停弹窗的问题
2019/09/18 Javascript
Javascript中的奇葩知识,你知道吗?
2021/01/25 Javascript
[52:02]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第二场 2月26日
2021/03/11 DOTA
跟老齐学Python之Python文档
2014/10/10 Python
Python实现数据库编程方法详解
2015/06/09 Python
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
python+opencv实现动态物体追踪
2018/01/09 Python
浅谈SciPy中的optimize.minimize实现受限优化问题
2020/02/29 Python
Python PyQt5整理介绍
2020/04/01 Python
xadmin使用formfield_for_dbfield函数过滤下拉表单实例
2020/04/07 Python
python 图像判断,清晰度(明暗),彩色与黑白实例
2020/06/04 Python
python实现图片转换成素描和漫画格式
2020/08/19 Python
利用CSS3 动画 绘画 圆形动态时钟
2018/03/20 HTML / CSS
Html5插件教程之添加浏览器放大镜效果的商品橱窗
2016/01/07 HTML / CSS
如何在Cookie里面保存Unicode和国际化字符
2013/05/25 面试题
竞聘书格式及范文
2014/03/31 职场文书
售后服务承诺书怎么写
2014/05/21 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
公积金具结保证书
2015/05/11 职场文书
代理词怎么写
2015/05/25 职场文书