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之玩转字符串(2)更新篇
Sep 28 Python
Python中的lstrip()方法使用简介
May 19 Python
Python计时相关操作详解【time,datetime】
May 26 Python
Python实现的下载网页源码功能示例
Jun 13 Python
深入理解Django中内置的用户认证
Oct 06 Python
Python concurrent.futures模块使用实例
Dec 24 Python
python GUI库图形界面开发之PyQt5多线程中信号与槽的详细使用方法与实例
Mar 08 Python
Python连接mysql方法及常用参数
Sep 01 Python
详解使用Python写一个向数据库填充数据的小工具(推荐)
Sep 11 Python
用Python制作音乐海报
Jan 26 Python
Pyhton模块和包相关知识总结
May 12 Python
pytorch训练神经网络爆内存的解决方案
May 22 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页面缓存ob系列函数介绍
2012/10/18 PHP
PHP用函数嵌入网站访问量计数器
2017/10/27 PHP
php7 图形用户界面GUI 开发示例
2020/02/22 PHP
JS 加入收藏夹的代码(主流浏览器通用)
2013/05/13 Javascript
JS教程:window.location使用方法的区别介绍
2013/10/04 Javascript
Node调试工具JSHint的安装及配置教程
2014/05/27 Javascript
异步JS框架的作用以及实现方法
2015/10/29 Javascript
jQuery form插件之ajaxForm()和ajaxSubmit()的可选参数项对象
2016/01/23 Javascript
纯js实现倒计时功能
2017/01/06 Javascript
AngularJS实现表单验证功能
2017/01/09 Javascript
详解webpack提取第三方库的正确姿势
2017/12/22 Javascript
详解js跨域请求的两种方式,支持post请求
2018/05/05 Javascript
vue打开新窗口并实现传参的图文实例
2021/03/04 Vue.js
python实现计算资源图标crc值的方法
2014/10/05 Python
Python 中迭代器与生成器实例详解
2017/03/29 Python
Windows下python3.6.4安装教程
2018/07/31 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
对python中字典keys,values,items的使用详解
2019/02/03 Python
Python实现的多进程拷贝文件并显示百分比功能示例
2019/04/09 Python
python 使用plt画图,去除图片四周的白边方法
2019/07/09 Python
在OpenCV里实现条码区域识别的方法示例
2019/12/04 Python
Python改变对象的字符串显示的方法
2020/08/01 Python
python基于exchange函数发送邮件过程详解
2020/11/06 Python
python爬取微博评论的实例讲解
2021/01/15 Python
H5混合开发app如何升级的方法
2018/01/10 HTML / CSS
入学生会自荐书范文
2014/02/05 职场文书
《九寨沟》教学反思
2014/04/08 职场文书
工作保证书范文
2014/04/29 职场文书
运动会闭幕词
2015/01/28 职场文书
2015年打非治违工作总结
2015/04/02 职场文书
工程技术员岗位职责
2015/04/11 职场文书
2016大学生入党积极分子心得体会
2016/01/06 职场文书
话题作文之成长
2019/12/09 职场文书
python小程序之飘落的银杏
2021/04/17 Python
详解Java实践之抽象工厂模式
2021/06/18 Java/Android
浅谈 JavaScript 沙箱Sandbox
2021/11/02 Javascript