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 相关文章推荐
推荐11个实用Python库
Jan 23 Python
在Django的视图(View)外使用Session的方法
Jul 23 Python
Python构造自定义方法来美化字典结构输出的示例
Jun 16 Python
对python中Librosa的mfcc步骤详解
Jan 09 Python
Python3 log10()函数简单用法
Feb 19 Python
用Python画小女孩放风筝的示例
Nov 23 Python
浅谈PyTorch的可重复性问题(如何使实验结果可复现)
Feb 20 Python
解决pycharm每次打开项目都需要配置解释器和安装库问题
Feb 26 Python
Django实现前台上传并显示图片功能
May 29 Python
Python中有几个关键字
Jun 04 Python
Python还能这么玩之只用30行代码从excel提取个人值班表
Jun 05 Python
python3 字符串str和bytes相互转换
Mar 23 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 session 预定义数组
2009/03/16 PHP
递归删除一个节点以及该节点下的所有节点示例
2014/03/19 PHP
php使用GeoIP库实例
2014/06/27 PHP
JavaScript OOP类与继承
2009/11/15 Javascript
最新28个很棒的jQuery 教程
2011/05/28 Javascript
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
js 对小数加法精度处理示例说明
2013/12/27 Javascript
JS面向对象编程详解
2016/03/06 Javascript
内容滑动切换效果jquery.hwSlide.js插件封装
2016/07/07 Javascript
微信小程序 石头剪刀布实例代码
2017/01/04 Javascript
基于JavaScript实现窗口拖动效果
2017/01/18 Javascript
vue router demo详解
2017/10/13 Javascript
React-intl 实现多语言的示例代码
2017/11/03 Javascript
jQuery与vue实现拖动验证码功能
2018/01/30 jQuery
通过jquery toggleClass()属性制作文章段落更改背景颜色
2018/05/21 jQuery
vue项目打包上传github并制作预览链接(pages)
2019/04/19 Javascript
关于Node.js中频繁修改代码重启服务器的问题
2020/10/15 Javascript
基于JavaScript实现随机点名器
2021/02/25 Javascript
[05:02][DOTA2]DOTA进化论 第一期
2013/09/27 DOTA
Python中zip()函数用法实例教程
2014/07/31 Python
Python中使用异常处理来判断运行的操作系统平台方法
2015/01/22 Python
Python计算两个日期相差天数的方法示例
2017/05/23 Python
python中判断文件编码的chardet(实例讲解)
2017/12/21 Python
python cs架构实现简单文件传输
2020/03/20 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
利用Python模拟登录pastebin.com的实现方法
2019/07/12 Python
将tensorflow模型打包成PB文件及PB文件读取方式
2020/01/23 Python
python复合条件下的字典排序
2020/12/18 Python
意大利制造的男鞋和女鞋:SCAROSSO
2018/03/07 全球购物
Paul’s Boutique官网:英国时尚手袋品牌
2018/03/31 全球购物
以设计师精品品质提供快速时尚:Mostata
2019/05/10 全球购物
Java如何支持I18N?
2016/10/31 面试题
中学家长会邀请函
2014/02/03 职场文书
多媒体编辑专业毕业生求职信
2014/06/13 职场文书
公司考勤管理制度
2015/08/04 职场文书
pytorch中[..., 0]的用法说明
2021/05/20 Python