python2与python3的字符串编码对比

两个版本都有两种字符串类型,用于存储二进制字节,Unicode字符。

python3相比于python2最大改变在于,python 3对文本和二进制数据作了更为清晰的区分,两者不可做任何隐式转化。

二进制字节

unicode字符

python2

str类型

unicode类型

python3

bytes类型

str类型

一、字符串的编码发展历史

字符串的编码最一开始是ascii,使用8位二进制表示,因为英文就是编码的全部。后来其他国家的语言加入进来,ascii就不够用了,所以一种万国码就出现了,它的名字就叫unicode,unicode编码对所有语言使用两个字节,部分汉语使用三个字节。但是这就导致一个问题,就是unicode不仅不兼容ascii编码,而且会造成空间的浪费,于是uft-8编码应运而生了,utf-8编码对英文使用一个字节的编码,由于这样的特点,很快得到全面的使用。

二、 字节码bytes

python3中bytes用b’xxx’表示,其中的x可以用字符,也可以用ascii表示。python3中的二进制文件(如文本文件)统一采用字节码读写。

1. 字节码的使用举例

2 字节码的修改

要修改bytes中的某一个字节必须要将其转换为bytearray以后才可以。如下:

三、 字节码bytes与字符之间的关系

将表示二进制的bytes进行适当编码就可以变为字符了,比如utf-8或是gbk等等编码格式都可以。

在内存中,统一使用unicode编码,需要保存或者传输时,转换成UTF8编码。

四、字节码bytes与unicode字符的相互转换

python2可以隐式地将str类型(存储二进制字节)转换为unicode类型(存储unicode字符)

Python3不会以任意隐式的方式混用str类型(存储unicode字符)和bytes类型(存储二进制字节),正是这使得两者的区分特别清晰

不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然)。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏C语言及其他语言

【编程经验】结构体的定义和使用

结构体的定义和使用 结构体与数组类似,都是由若干分量组成的,与数组不同的是,结构体的成员可以是不同类型,可以通过成员名来访问结构体的元素。 ...

35412
来自专栏大闲人柴毛毛

稳扎稳打JS——自由变量

自由变量的作用域在程序运行前就已经确定! 自由变量相当于Java中的全局变量,它在外层作用域中声明,但在内层作用域中使用,如下所示: var a = 1; f...

3667
来自专栏CDA数据分析师

工具 | Python集合使用详解

我会在这篇文章介绍Python几种类型的集合。 在开始前,先定义集合是什么。一个集合就像篮子,你可以放进和取出东西,可以是同一类的东西,也可以是不同类的。基本上...

2105
来自专栏Python爬虫与数据挖掘

Python正则表达式初识(二)

前几天给大家分享了Python正则表达式初识(一),介绍了正则表达式中的三个特殊字符“^”、“.”和“*”,感兴趣的伙伴可以戳进去看看,今天小编继续给大家分享P...

1335
来自专栏程序员的知识天地

20分钟搞定Python 函数基础知识

简单地说,一个函数就是一组Python语句的组合,它们可以在程序中运行一次或多次运行。Python中的函数在其他语言中也叫做过程或子例程,那么这些被包装起来的语...

1373
来自专栏老马说编程

计算机程序的思维逻辑 (13) - 类

类 程序主要就是数据以及对数据的操作,为方便理解和操作,高级语言使用数据类型这个概念,不同的数据类型有不同的特征和操作,Java定义了八种基本数据类型,其中,...

18710
来自专栏前端知识分享

第171天:面向对象——对象实例和原型对象进阶

这样,如果我们需要修改所有实例中的属性或者方法,就只需要修改一处,就能够影响到所有实例了

893
来自专栏北京马哥教育

python的类访问控制

在python类中,有属性和方法,外部代码可以直接通过实例来访问修改。 如果需要让内部的属性不被外部访问到,在属性变量前面加上__2个下划线。 在python中...

4146
来自专栏游戏杂谈

LuaJit转义的问题

之前在项目中,处理类似!30转为表现的字符串时,有人写了这样的一段代码“\![1-2][0-9]”,当换成luajit时启动报错了,出错原因在于转义字符使用不对...

1572
来自专栏开源优测

[快学Python3]类基础

概述 Python从设计之初就是面向对象的编程语言,所以在Python中创建一个类和对象是轻而易举的。 本文就Python的面向对象编程进行分享。 几个基本的概...

3276

扫码关注云+社区

领取腾讯云代金券