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 相关文章推荐
在类Unix系统上开始Python3编程入门
Aug 20 Python
python高手之路python处理excel文件(方法汇总)
Jan 07 Python
关于python pyqt5安装失败问题的解决方法
Aug 08 Python
Python使用Pickle库实现读写序列操作示例
Jun 15 Python
python特性语法之遍历、公共方法、引用
Aug 08 Python
python利用selenium进行浏览器爬虫
Apr 25 Python
python 实现return返回多个值
Nov 19 Python
pytorch 改变tensor尺寸的实现
Jan 03 Python
Pytorch 计算误判率,计算准确率,计算召回率的例子
Jan 18 Python
Python matplotlib模块及柱状图用法解析
Aug 10 Python
python matplotlib工具栏源码探析二之添加、删除内置工具项的案例
Feb 25 Python
python实现简易自习室座位预约系统
Jun 30 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
ZF等常用php框架中存在的问题
2008/01/10 PHP
php中++i 与 i++ 的区别
2012/08/08 PHP
sae使用smarty模板的方法
2013/12/17 PHP
PHP使用curl_multi实现并发请求的方法示例
2018/04/29 PHP
Extjs学习笔记之五 一个小细节renderTo和applyTo的区别
2010/01/07 Javascript
纯js分页代码(简洁实用)
2013/11/05 Javascript
javascript中不提供sleep功能如何实现这个功能
2014/05/27 Javascript
node.js中的path.extname方法使用说明
2014/12/09 Javascript
AngularJS 日期格式化详解
2015/12/23 Javascript
ECharts仪表盘实例代码(附源码下载)
2016/02/18 Javascript
javaScript中的原型解析【推荐】
2016/05/05 Javascript
JavaScript原生节点操作小结
2017/01/17 Javascript
利用CSS、JavaScript及Ajax实现图片预加载的三大方法
2017/01/22 Javascript
jQuery控制元素隐藏和显示
2017/03/03 Javascript
js实现瀑布流效果(自动生成新的内容)
2017/03/16 Javascript
详解vue-meta如何让你更优雅的管理头部标签
2018/01/18 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
2018/04/04 Javascript
小程序组件之自定义顶部导航实例
2019/06/12 Javascript
vue2.x数组劫持原理的实现
2020/04/19 Javascript
Python中让MySQL查询结果返回字典类型的方法
2014/08/22 Python
Python设计模式之状态模式原理与用法详解
2019/01/15 Python
使用CSS3创建动态菜单效果
2015/07/10 HTML / CSS
通过css3的filter滤镜改变png图片的颜色的示例代码
2020/05/06 HTML / CSS
英格兰橄榄球商店:England Rugby Store
2016/12/17 全球购物
英国文具、办公用品和科技商店:Ryman
2018/09/27 全球购物
两年的个人工作自我评价
2014/01/10 职场文书
实习单位接收函
2014/01/11 职场文书
高二地理教学反思
2014/01/24 职场文书
《尊严》教学反思
2014/02/11 职场文书
电子工程专业毕业生求职信
2014/03/14 职场文书
央视元宵晚会主持串词
2014/03/25 职场文书
大学四年个人总结
2015/03/03 职场文书
企业财务总监岗位职责
2015/04/03 职场文书
Spring Boot mybatis-config 和 log4j 输出sql 日志的方式
2021/07/26 Java/Android
SSM项目使用拦截器实现登录验证功能
2022/01/22 Java/Android
正则表达式拆分url实例代码
2022/02/24 Java/Android