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中break语句的用法
May 14 Python
浅析Python中的多条件排序实现
Jun 07 Python
基于python爬虫数据处理(详解)
Jun 10 Python
Python中%是什么意思?python中百分号如何使用?
Mar 20 Python
pandas 将list切分后存入DataFrame中的实例
Jul 03 Python
python如何以表格形式打印输出的方法示例
Jun 21 Python
基于Python生成个性二维码过程详解
Mar 05 Python
Python实现从N个数中找到最大的K个数
Apr 02 Python
Python预测2020高考分数和录取情况
Jul 08 Python
python 如何调用远程接口
Sep 11 Python
详解tensorflow之过拟合问题实战
Nov 01 Python
详解python定时简单爬取网页新闻存入数据库并发送邮件
Nov 27 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将数据库中所有内容生成静态html文档的代码
2010/04/12 PHP
php 数组使用详解 推荐
2011/06/02 PHP
PHP SOCKET编程详解
2015/05/22 PHP
如何写php守护进程(Daemon)
2015/12/30 PHP
HTTP状态代码以及定义(解释)
2007/02/02 Javascript
javaScript call 函数的用法说明
2010/04/09 Javascript
IE6中使用position导致页面变形的解决方案(js代码)
2011/01/09 Javascript
浅析jquery ajax异步调用方法中不能给全局变量赋值的原因及解决方法
2014/01/10 Javascript
单元选择合并变色示例代码
2014/05/26 Javascript
基于iframe实现类似于ajax的页面无刷新
2014/05/31 Javascript
简介JavaScript中的setDate()方法的使用
2015/06/11 Javascript
ECMAScript6中Map/WeakMap详解
2015/06/12 Javascript
举例说明如何为JavaScript的方法参数设置默认值
2015/11/17 Javascript
基于javascript实现的购物商城商品倒计时实例
2016/12/11 Javascript
详解javascript获取url信息的常见方法
2016/12/19 Javascript
Vue.js中数据绑定的语法教程
2017/06/02 Javascript
jQuery实现遍历XML节点和属性的方法示例
2018/04/29 jQuery
vue-router实现嵌套路由的讲解
2019/01/19 Javascript
vue在响应头response中获取自定义headers操作
2020/07/24 Javascript
ES6中的类(Class)示例详解
2020/12/09 Javascript
[40:17]2018DOTA2亚洲邀请赛 4.5 淘汰赛 LGD vs Liquid 第一场
2018/04/06 DOTA
[00:20]TI9观赛名额抽取Ⅱ
2019/07/24 DOTA
Django跨域请求CSRF的方法示例
2018/11/11 Python
记一次django内存异常排查及解决方法
2020/08/07 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
移动端rem布局的两种实现方法
2018/01/03 HTML / CSS
性能测试工程师的面试题
2015/02/20 面试题
金属材料工程个人求职的自我评价
2013/12/04 职场文书
校园达人秀策划书
2014/01/12 职场文书
上党课的心得体会
2014/09/02 职场文书
初中学生操行评语
2014/12/26 职场文书
亮剑观后感
2015/06/05 职场文书
消防演习感想
2015/08/10 职场文书
大学军训通讯稿(2016最新版)
2015/12/21 职场文书
如何使用Python提取Chrome浏览器保存的密码
2021/06/09 Python
vue如何清除浏览器历史栈
2022/05/25 Vue.js