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的一些用法分享
Oct 07 Python
python中的内置函数getattr()介绍及示例
Jul 20 Python
Python命令行参数解析模块optparse使用实例
Apr 13 Python
Python的Tornado框架异步编程入门实例
Apr 24 Python
python转换字符串为摩尔斯电码的方法
Jul 06 Python
pandas数据分组和聚合操作方法
Apr 11 Python
在Pycharm中项目解释器与环境变量的设置方法
Oct 29 Python
零基础使用Python读写处理Excel表格的方法
May 02 Python
python实现桌面气泡提示功能
Jul 29 Python
Python3中configparser模块读写ini文件并解析配置的用法详解
Feb 18 Python
python 链接sqlserver 写接口实例
Mar 11 Python
Python Selenium异常处理的实例分析
Feb 28 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中的cookie
2006/11/26 PHP
php中使用url传递数组的方法
2015/02/11 PHP
Windows Server 2008 R2和2012中PHP连接MySQL过慢的解决方法
2016/07/02 PHP
Python中使用django form表单验证的方法
2017/01/16 PHP
降低PHP Redis内存占用
2017/03/23 PHP
爆炸式的JS圆形浮动菜单特效代码
2010/03/03 Javascript
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
2012/11/11 Javascript
解析javascript 数组以及json元素的添加删除
2013/06/26 Javascript
javascript 得到文件后缀名的思路及实现
2020/05/09 Javascript
JS文本框追加多个下拉框的值的简单实例
2013/07/12 Javascript
Javascript基础教程之数据类型转换
2015/01/18 Javascript
jQuery解决input超多的表单提交
2015/08/10 Javascript
浅析jQuery 3.0中的Data
2016/06/14 Javascript
JavaScript读二进制文件并用ajax传输二进制流的方法
2016/07/18 Javascript
Vue.js实现图片的随意拖动方法
2018/03/08 Javascript
vue 全局环境切换问题
2019/10/27 Javascript
如何在Vue项目中添加接口监听遮罩
2021/01/25 Vue.js
[50:27]OG vs LGD 2018国际邀请赛淘汰赛BO3 第一场 8.26
2018/08/30 DOTA
Python实现同时兼容老版和新版Socket协议的一个简单WebSocket服务器
2014/06/04 Python
python处理csv数据的方法
2015/03/11 Python
Python实现登录人人网并抓取新鲜事的方法
2015/05/11 Python
python生成圆形图片的方法
2020/03/25 Python
python使用代理ip访问网站的实例
2018/05/07 Python
基于Pytorch版yolov5的滑块验证码破解思路详解
2021/02/25 Python
Html5剪切板功能的实现代码
2018/06/29 HTML / CSS
项目开发计划书
2014/01/09 职场文书
社区党总支书记先进事迹材料
2014/01/24 职场文书
廉洁自律演讲稿
2014/05/22 职场文书
商场租赁意向书
2014/07/30 职场文书
幼儿园老师新年寄语
2015/08/17 职场文书
优秀学生主要事迹怎么写
2015/11/04 职场文书
周末问候语大全
2015/11/10 职场文书
入党申请书怎么写?
2019/06/21 职场文书
标准发言稿结尾
2019/07/18 职场文书
详解nginx location指令
2022/01/18 Servers
vue使用echarts实现折线图
2022/03/21 Vue.js