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的Django框架中的templates设置
May 11 Python
python动态参数用法实例分析
May 25 Python
python实现文本文件合并
Dec 29 Python
关于Python中Inf与Nan的判断问题详解
Feb 08 Python
关于Python 3中print函数的换行详解
Aug 08 Python
python+opencv+caffe+摄像头做目标检测的实例代码
Aug 03 Python
python占位符输入方式实例
May 27 Python
如何运行带参数的python脚本
Nov 15 Python
Python FFT合成波形的实例
Dec 04 Python
使用TensorFlow直接获取处理MNIST数据方式
Feb 10 Python
selenium WebDriverWait类等待机制的实现
Mar 18 Python
Python如何使用神经网络进行简单文本分类
Feb 25 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
人大复印资料处理程序_查询篇
2006/10/09 PHP
用PHP来写记数器(详细介绍)
2006/10/09 PHP
利用curl 多线程 模拟 并发的详解
2013/06/14 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
PHP中类的继承和用法实例分析
2016/05/24 PHP
鼠标移动到一张图片时变为另一张图片
2006/12/05 Javascript
JS时间选择器 兼容IE6,7,8,9
2012/06/26 Javascript
jquery实现的可隐藏重现的靠边悬浮层实例代码
2013/05/27 Javascript
常用js字符串判断方法整理
2013/10/18 Javascript
js操作DOM--添加、删除节点的简单实例
2016/07/08 Javascript
JS实现颜色动态淡化效果
2017/03/06 Javascript
angular-cli修改端口号【angular2】
2017/04/19 Javascript
vue组件间通信子与父详解(二)
2017/11/07 Javascript
Webpack打包字体font-awesome的方法示例
2018/04/26 Javascript
基于Vue 实现一个中规中矩loading组件
2019/04/03 Javascript
微信小程序 wepy框架与iview-weapp的用法详解
2019/04/10 Javascript
jQuery实现动态加载(按需加载)javascript文件的方法分析
2019/05/31 jQuery
关于layui导航栏不展示下拉列表的解决方法
2019/09/25 Javascript
在SSM框架下用laypage和ajax实现分页和数据交互的方法
2019/09/27 Javascript
Javascript实现html转pdf高清版(提高分辨率)
2020/02/19 Javascript
vue 函数调用加括号与不加括号的区别
2020/10/29 Javascript
[58:18]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Mineski
2018/03/30 DOTA
Python图像处理之识别图像中的文字(实例讲解)
2018/05/10 Python
python检测主机的连通性并记录到文件的实例
2018/06/21 Python
详解Python locals()的陷阱
2019/03/26 Python
Python列表list操作相关知识小结
2020/01/29 Python
python json.dumps中文乱码问题解决
2020/04/01 Python
Python实现代码块儿折叠
2020/04/15 Python
python下对hsv颜色空间进行量化操作
2020/06/04 Python
Python实现自动整理文件的脚本
2020/12/17 Python
详解HTML5中的picture元素响应式处理图片
2018/01/03 HTML / CSS
adidas泰国官网:adidas TH
2020/07/11 全球购物
初中科学教学反思
2014/01/21 职场文书
幼儿园中秋节活动方案2013
2014/01/29 职场文书
导师就业推荐信范文
2014/05/22 职场文书
三方股份合作协议书
2014/10/13 职场文书