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 相关文章推荐
Pyhton中防止SQL注入的方法
Feb 05 Python
详解Python中DOM方法的动态性
Apr 11 Python
Python文件及目录操作实例详解
Jun 04 Python
Python连接mysql数据库的正确姿势
Feb 03 Python
Python中属性和描述符的正确使用
Aug 23 Python
python实现下载pop3邮件保存到本地
Jun 19 Python
pycharm 取消默认的右击运行unittest的方法
Nov 29 Python
详解Python list和numpy array的存储和读取方法
Nov 06 Python
Python实现把多维数组展开成DataFrame
Nov 30 Python
详解python方法之绑定方法与非绑定方法
Aug 17 Python
matplotlib之pyplot模块实现添加子图subplot的使用
Apr 25 Python
尝试使用Python爬取城市租房信息
Apr 12 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页面局部刷新功能的实现小结
2013/06/21 PHP
9个经典的PHP代码片段分享
2014/12/18 PHP
php pthreads多线程的安装与使用
2016/01/19 PHP
php微信浏览器分享设置以及回调详解
2016/08/01 PHP
老生常谈php中传统验证与thinkphp框架(必看篇)
2017/06/10 PHP
利用Homestead快速运行一个Laravel项目的方法详解
2017/11/14 PHP
PHP基于PDO扩展操作mysql数据库示例
2018/12/24 PHP
JQuery 国际象棋棋盘 实现代码
2009/06/26 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
dotopAlert 提示用户需安装播放器的代码
2012/09/17 Javascript
给Flash加一个超链接(推荐使用透明层)兼容主流浏览器
2013/06/09 Javascript
JS记录用户登录次数实现代码
2014/01/15 Javascript
jQuery 获取/设置/删除DOM元素的属性以a元素为例
2014/05/23 Javascript
简介AngularJS的HTML DOM支持情况
2015/06/17 Javascript
jQuery移动端图片上传组件
2016/06/12 Javascript
浅谈js函数三种定义方式 & 四种调用方式 & 调用顺序
2017/02/19 Javascript
微信小程序 页面传值详解
2017/03/10 Javascript
jQuery实现字体颜色渐变效果的方法
2017/03/29 jQuery
javascript实现QQ空间相册展示源码
2017/12/12 Javascript
js中Object.defineProperty()方法的不详解
2018/07/09 Javascript
Angular路由ui-router配置详解
2018/08/01 Javascript
简单介绍Python中的len()函数的使用
2015/04/07 Python
Django验证码的生成与使用示例
2017/05/20 Python
基于Python_脚本CGI、特点、应用、开发环境(详解)
2017/05/23 Python
树莓派+摄像头实现对移动物体的检测
2019/06/22 Python
python可视化爬虫界面之天气查询
2019/07/03 Python
Python查找不限层级Json数据中某个key或者value的路径方式
2020/02/27 Python
PyInstaller将Python文件打包为exe后如何反编译(破解源码)以及防止反编译
2020/04/15 Python
分享8款纯CSS3实现的搜索框功能
2017/09/14 HTML / CSS
html5拖拽应用记录及注意点
2020/05/27 HTML / CSS
中东奢侈品市场:Coveti
2019/05/12 全球购物
美国在线家具网站:GDFStudio
2021/03/13 全球购物
乡镇机关党员民主评议表自我评价
2014/09/21 职场文书
运动会铅球比赛加油稿
2014/09/26 职场文书
公司要求试用期员工提交“述职报告”,该怎么写?
2019/07/17 职场文书
简短的36句中秋节祝福信息语句
2019/09/09 职场文书