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 相关文章推荐
Python3.2中Print函数用法实例详解
May 19 Python
在Python中操作文件之read()方法的使用教程
May 24 Python
利用Python脚本生成sitemap.xml的实现方法
Jan 31 Python
python实现人人自动回复、抢沙发功能
Jun 08 Python
Django中使用Whoosh进行全文检索的方法
Mar 31 Python
使用OpenCV实现仿射变换—旋转功能
Aug 29 Python
python将三维数组展开成二维数组的实现
Nov 30 Python
Jupyter 无法下载文件夹如何实现曲线救国
Apr 22 Python
解决windows上安装tensorflow时报错,“DLL load failed: 找不到指定的模块”的问题
May 20 Python
python:删除离群值操作(每一行为一类数据)
Jun 08 Python
解决keras GAN训练是loss不发生变化,accuracy一直为0.5的问题
Jul 02 Python
python lambda的使用详解
Feb 26 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实现QQ空间获取当前用户的用户名并生成图片
2015/07/25 PHP
php生成图片验证码的实例讲解
2015/08/03 PHP
Yii2中添加全局函数的方法分析
2017/05/04 PHP
thinkphp5.1 框架导入/导出excel文件操作示例
2020/05/25 PHP
再次更新!MSClass (Class Of Marquee Scroll通用不间断滚动JS封装类 Ver 1.6)
2007/02/05 Javascript
用JQuery在网页中实现分隔条功能的代码
2012/08/09 Javascript
jquery remove方法应用详解
2012/11/22 Javascript
javascript的原生方法获取数组中的最大(最小)值
2012/12/19 Javascript
js中Image对象以及对其预加载处理示例
2013/11/20 Javascript
基于jQuery实现的文字按钮表单特效整理
2014/12/07 Javascript
JavaScript通过function定义对象并给对象添加toString()方法实例分析
2015/03/23 Javascript
JavaScript类型检测之typeof 和 instanceof 的缺陷与优化
2016/01/13 Javascript
基于RequireJS和JQuery的模块化编程——常见问题全面解析
2016/04/14 Javascript
JS实现控制文本框的内容
2016/07/10 Javascript
Vue项目添加动态浏览器头部title的方法
2018/07/11 Javascript
基于vue-router 多级路由redirect 重定向的问题
2018/09/03 Javascript
vue的过滤器filter实例详解
2018/09/17 Javascript
解密Python中的描述符(descriptor)
2015/06/03 Python
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
Python多进程与服务器并发原理及用法实例分析
2018/08/21 Python
python+unittest+requests实现接口自动化的方法
2018/11/29 Python
python时间序列按频率生成日期的方法
2019/05/14 Python
使用python os模块复制文件到指定文件夹的方法
2019/08/22 Python
Python实现数值积分方式
2019/11/20 Python
Python字典生成式、集合生成式、生成器用法实例分析
2020/01/07 Python
Python GUI编程学习笔记之tkinter控件的介绍及基本使用方法详解
2020/03/30 Python
python计算Content-MD5并获取文件的Content-MD5值方式
2020/04/03 Python
使用matplotlib动态刷新指定曲线实例
2020/04/23 Python
Tensorflow卷积实现原理+手写python代码实现卷积教程
2020/05/22 Python
Python获取指定网段正在使用的IP
2020/12/14 Python
HTML5 body设置全屏背景图片的示例代码
2020/12/08 HTML / CSS
希尔顿酒店官方网站:Hilton Hotels
2017/06/01 全球购物
西班牙手机之家:Phone House
2018/10/18 全球购物
俄罗斯披萨、寿司和面食送货到家服务:2 Берега
2019/12/15 全球购物
倡导文明标语
2014/06/16 职场文书
教你如何用cmd快速登录服务器
2022/06/10 Servers