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中使用异常处理来判断运行的操作系统平台方法
Jan 22 Python
python回调函数用法实例分析
May 09 Python
Python网络爬虫与信息提取(实例讲解)
Aug 29 Python
python使用xpath中遇到:到底是什么?
Jan 04 Python
python批量设置多个Excel文件页眉页脚的脚本
Mar 14 Python
Python使用random.shuffle()打乱列表顺序的方法
Nov 08 Python
Django异步任务之Celery的基本使用
Mar 23 Python
Python基础学习之类与实例基本用法与注意事项详解
Jun 17 Python
django 自定义过滤器(filter)处理较为复杂的变量方法
Aug 12 Python
解决Numpy中sum函数求和结果维度的问题
Dec 06 Python
在pytorch中对非叶节点的变量计算梯度实例
Jan 10 Python
Python Flask异步发送邮件实现方法解析
Aug 01 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
thinkPHP实现签到功能的方法
2017/03/15 PHP
PHP7 新增功能
2021/03/09 PHP
关于Javascript 的 prototype问题。
2007/01/03 Javascript
Add a Picture to a Microsoft Word Document
2007/06/15 Javascript
js实现权限树的更新权限时的全选全消功能
2009/02/17 Javascript
实现web打印的各种方法介绍及实现代码
2013/01/09 Javascript
jquery无限级联下拉菜单简单实例演示
2015/11/23 Javascript
基于JS实现EOS隐藏错误提示层代码
2016/04/25 Javascript
jQuery弹出div层过2秒自动消失
2016/11/29 Javascript
详解前端构建工具gulpjs的使用介绍及技巧
2017/01/19 Javascript
JS仿淘宝搜索框用户输入事件的实现
2017/06/19 Javascript
基于jQuery实现的Ajax 验证用户名唯一性实例代码
2017/06/28 jQuery
实现一个完整的Node.js RESTful API的示例
2017/09/29 Javascript
详解如何在React组件“外”使用父组件的Props
2018/01/12 Javascript
如何以Angular的姿势打开Font-Awesome详解
2018/04/22 Javascript
vue 解决computed修改data数据的问题
2019/11/06 Javascript
Vue学习笔记之计算属性与侦听器用法
2019/12/07 Javascript
解决Vue @submit 提交后不刷新页面问题
2020/07/18 Javascript
Vue中ref和$refs的介绍以及使用方法示例
2021/01/11 Vue.js
[06:01]刀塔次级联赛top10第一期
2014/11/07 DOTA
[01:48:04]DOTA2-DPC中国联赛 正赛 PSG.LGD vs Elephant BO3 第一场 2月7日
2021/03/11 DOTA
python3新特性函数注释Function Annotations用法分析
2016/07/28 Python
对python实现模板生成脚本的方法详解
2019/01/30 Python
Python列表常见操作详解(获取,增加,删除,修改,排序等)
2019/02/18 Python
快速查找Python安装路径方法
2020/02/06 Python
Python Handler处理器和自定义Opener原理详解
2020/03/05 Python
css3实现3D色子翻转特效
2014/12/23 HTML / CSS
什么是反射?如何实现反射?
2016/07/25 面试题
打架检讨书100字
2014/01/08 职场文书
求职信需要的五点内容
2014/02/01 职场文书
庆元旦广播稿
2014/02/10 职场文书
会计岗位职责范本
2014/03/07 职场文书
百日安全生产活动总结
2014/07/05 职场文书
护士求职信
2014/07/05 职场文书
大学生预备党员自我评价
2015/03/04 职场文书
教育教学工作反思
2016/02/24 职场文书