Python 字符串(string)和字节型(bytes)

【python基础】—python string和bytes类型互相转换(decode()/str()/encode()/bytes()) python string和bytes类型互相转换(decode()/str()/encode()/bytes()) 阅读详情


字符串平常用的比较多,该篇主要记录一下Python处理字节型,顺便对基础知识做一下回顾和小结。

Python3最重要的新特性之一是对字符串和二进制数据流做了明确的区分:

  • 文本总是Unicode,由str类型表示
  • 二进制数据则由bytes类型表示
  • Python3不会以任意隐式的方式混用str和bytes
    你不能拼接字符串和字节流,也无法在字节流里搜索字符串(反之亦然),也不能将字符串传入参数为字节流的函数(反之亦然)

1. 编码常识

比特、字节、字符

  • 计算机存储信息的最小单位,称之为位(bit),音译为比特,二进制的一个“0”或一个“1”叫一位。

  • 计算机存储容量基本单位是字节(Byte),音译为拜特,8个二进制位组成1个字节。

    最早的计算机在设计时采用8个比特(bit)作为一个字节(byte)
    所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。

  • 计算机存储容量大小以字节数来度量,1024进位制

    1024B=1K(千)B
    1024KB=1M(兆)B
    1024MB=1G(吉)B
    1024GB=1T(太)B

  • 字符是一种符号,同以上说的存储单位不是一回事,是指计算机中使用的文字和符号。

ASCII编码

  • 只能表示127个字符,包括大小写英文字母、数字和一些符号
  • 用一个字节表示一个字符

GBK

Unicode

  • 把所有语言都统一到一套编码里
  • 用两个字节表示一个字符

UTF-8编码

  • 把Unicode编码转化为“可变长编码”
  • UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。

小结

  • 在计算机内存中,统一使用Unicode编码
  • 当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。

2. Python3字符串和字节型

概述

  • Python的字符串类型是str,在内存中以Unicode表示,一个字符对应若干个字节

  • 如果要在网络上传输,或者保存到磁盘上,就需要把str 编码以字节为单位的bytes,即网络传输和接收到的数据都是bytes,如过想要解读则需要将bytes 解码为str

    bytes只负责以字节序列的形式(二进制形式)来存储数据,至于这些数据到底表示什么内容(字符串,数字,图片,音频等),完全由程序的解析方式决定,如果采用合适的字符编码方式(字符集),字节串可以恢复成字符串,反之亦然,字符串也可以转换成字节串。

用法

  • bytes类型:x = b'ABC';str类型:x = ‘ABC’

    要注意区分'ABC'和b'ABC':
    'ABC'是str,b'ABC'的内容虽然显示得和前者一样,但bytes的每个字符都只占用一个字节。

  • str (以Unicode表示)编码为指定bytes:'ABC'.encode('ascii')或者'中文'.encode('utf-8')

    注意:
    纯英文的str可以用ASCII编码为bytes,内容是一样的,含有中文的str可以用UTF-8编码为bytes。
    含有中文的str无法用ASCII编码,因为中文编码的范围超过了ASCII编码的范围,Python会报错。

  • 在bytes中,无法显示为ASCII字符的字节,用\x##显示
    这句话意思是,对于bytes,不被ASCII表示的字符,用\x##显示出来

  • 计算str包含度多少字符:len(str)

  • 计算bytes包含的字节数:len(bytes)

小结

  • 在将字符串存入磁盘和从磁盘读取字符串的过程中,Python自动地帮你完成了编码和解码的工作,你不需要关心它的过程。
  • 使用bytes类型,实质上是告诉Python,不需要它帮你自动地完成编码和解码的工作,而是用户自己手动进行,并指定编码格式。
  • Python已经严格区分了bytes和str两种数据类型,你不能在需要bytes类型参数的时候使用str参数,反之亦然。这点在读写磁盘文件时容易碰到。
  • python3默认的编码时,Unicode用字符串表示,二进制数据由bytes类型表示。
  • encode:将str转换为bytes,是一个编码的过程;decode:将bytes转换为str,是一个解码的过程
  • 一句话总结?:不论是网络传输还是保存到硬盘上,都是脱离了内存空间,所以可以粗略的概括为在内存里以Unicode编码(Python3 str类型)存在,想要离开内存就必须转换为字节型(Python3 bytes类型))

文本字符串和字节字符串

第一次看到“文本字符串”就有些懵逼,后来才明白文本字符串类型就是str类型嘛。

Python语言有两种不同的字符串,一个用于存储文本,一个用于存储原始字节:

  • 文本字符串内部使用Unicode存储,Python3中被命名为str
  • 字节字符串存储原始字节并显示ASCII,Python3中被命名为bytes。

3. 应用

文本

文件总是存储字节,为了使用文件中读取的文本数据,必须首先将其解码为一个文本字符串。

python3中,文本正常情况下会自动为你解码,所以打开或读取文件会得到一个文本字符串。
使用的解码方式取决系统,在mac os 或者 大多数linux系统中,首选编码是utf-8,但windows不一定。
可以使用locale.getpreferredencoding()方法得到系统的默认解码方式。

主要参考:

  1. Python的字符串和字节型
  2. 字符串和编码
  3. 为什么python打印数据显示为b“xxx“格式
  4. python3中网络编程的编码问题——这个讲的比较全面
CTF逆向工程中RC4、TEA、Base64加密算法的快速识别与实战 在信息安全与逆向工程领域,加密算法识别是分析二进制程序、理解其数据保护机制的核心基础。其原理在于,每种加密算法在实现时都会留下独特的代码模式或数据特征,如同指纹。掌握这些特征的技术价值在于,能极大提升在CTF竞赛、恶意软件分析或软件漏洞挖掘中的效率,快速定位关键逻辑。应用场景广泛,从CTF赛题破解到软件安全审计都至关重要。本文聚焦于CTF逆向中高频出现的RC4、TEA和Base64,深入解析其静态与动态特征,例如RC4算法的256字节S盒初始化循环和TEA算法的标志性魔数0x9E3779B9,并提供结合Py 阅读详情

相关推荐

python3中的string 和bytes有什么区别

特性字符串 (str字节序列 (bytes表示内容Unicode文本二进制数据数据存储字符字节(每个元素是0-255之间的整数)使用场景文本处理(语言字符、文本数据)二进制处理(文件、网络数据、加密)转换方式.encode()转为字节序列.decode()转为字符串总之,str和bytesstr是文本的抽象表示,而bytes是二进制数据的表示。两者之间的转换依赖于特定的编码方式,如UTF-8等。字节序列b是通过对字符串"你好"进行 UTF-8 编码得到的。

u010674101的专栏 504

Base64的编码和解码以及存储到指定位置通过uuid生成唯一主键进行调用

主要通过对base64的处理以及 UUID的唯一主键对图片文件进行保存以及处理 package baseoflearn.learn; import java.io.*; import java.util.Base64; /** * @author :zhaofuh * @date :Created in 2020/10/26 16:22 * @description:对于图片的常用传输格式base64进行编码和解码的处理主要是解码过程中头部 的操作以及存储 * @modified By:

大哥的叔的博客 6039

2.数字芯片时序正确的前提—Max-transition

芯片物理设计中最基本的Max-transition检查

weixin_43868998的博客 5426

【自学Python】Python string转bytes

Python3 新增了 string 转 bytes,用于代表字节序列。字符串(string) 是一串字符组成的序列,字符串处理的基本单位是字符,string 转 bytes 是一串字节组成的序列,bytes 类型处理的基本单位是字节。

haicoder_ibai的博客 6053

Win11专业版破解RDP限制:实现多用户远程桌面协同办公

本文详细介绍了如何在Windows 11专业版上破解RDP限制,实现多用户远程桌面协同办公。通过使用RDPWrap工具,用户可以绕过微软的授权限制,允许多个用户同时登录同一台电脑,提高硬件利用率和团队协作效率。文章包含详细的安装配置步骤、性能优化技巧及常见问题解决方案,适用于需要远程协作的办公场景。

weixin_33806300的博客 466

基于奥比中光Orbbec Astra Pro与ROS实现实时3D环境建模:orb_slam2实战指南

本文提供了一份详细的实战指南,介绍如何使用奥比中光Orbbec Astra Pro深度摄像头与ROS系统,部署并运行ORB-SLAM2算法,实现实时3D环境建模与定位。内容涵盖从驱动安装、环境配置、算法编译到摄像头标定与性能调优的全流程,旨在帮助开发者快速搭建一套高性价比的视觉SLAM系统。

weixin_29054399的博客 334

Python中字节串(bytes)和字符串(string)的区别

Python中字节串(bytes)和字符串(string)的区别

PlutoZuo的博客 5248

数字IC后端设计实战:从floorplan到powerplan的优化策略

本文深入探讨了数字IC后端设计中从Floorplan到Powerplan的核心优化策略。文章强调了Floorplan作为布局基础的重要性,并详细解析了Powerplan规划,特别是针对低功耗设计中MTCMOS的应用与IR Drop分析。通过实战经验分享,提供了从模块摆放到电源网络构建、再到IR Drop问题层层递进的解决方案,旨在帮助后端工程师构建稳健高效的芯片物理设计。

weixin_28338005的博客 349

python字符串加数字_Python数字、字符串

1. 数字byte在python3中最重要的特性是对文本和二进制数据做了更加清晰的区分,python3不会以任意隐式方式混用字节型和字符型,也因此在python3中不能拼接字符串和字节包(python2中可以,会自动进行转换),也不能在字节包中搜索字符串,也不能将字符串传入参数为字节包的函数。需要注意的是,在网络数据传输过程中,python2可以通过字符串(string)方式传输,但是python...

weixin_39875754的博客 2405

扫地机器人:从仿真到决策,一个完整SLAM导航系统的自研之路

本文详细记录了从零开始自研扫地机器人SLAM导航系统的全过程,涵盖ROS-Gazebo仿真系统搭建、地图预处理优化、全覆盖规划算法迭代等关键技术。通过三次算法升级,最终实现92%的清洁效率,并分享DWA调参、状态机设计等实战经验,为开发者提供从仿真到落地的完整解决方案。

weixin_29053695的博客 352

硬件-汽车电子-TBOX/TCAM核心器件选型与系统集成设计指南

本文深入解析汽车电子TBOX/TCAM硬件架构与系统集成设计,涵盖核心器件选型、电源管理、信号完整性优化等关键点。重点分享5G模组选型避坑经验、MCU隐性指标及热设计验证方案,为车载通信系统开发提供实用指南。

weixin_30352645的博客 531

Python3 struct报错: argument for ‘s‘ must be a bytes object

例如,'10s' 表示一个 10 字节的字节串,而 '10c' 表示 10 个字符。python3不会以任意隐式方式混用字节型和字符型,也因此在python3中不能拼接字符串和字节包(python2中可以,会自动进行转换),也不能在字节包中搜索字符串,也不能将字符串传入参数为字节包的函数。先说解决方案:格式化字符串的值在python的类型是bytes类型,而python3中所有文本都是Unicode,所以需要转换为bytes类型,在'spam'前面加’b'进行转换。'你好'.encode('utf-8')

pingguocu3的博客 675

WIN10系统下VS2019编译CloudCompare2.12.4

CloudCompare2.12.4

点云侠的博客 3143

python学习笔记4-字符串和字节转换

Bytes 对象是由单个字节作为基本元素(8位,取值范围 0-255)组成的序列,为不可变对象。可以通过调⽤bytes()⽣成bytes实例,其值形式为 b'xxxxx',其中 'xxxxx' 为⼀⾄多个 转义的⼗六进制字符串(单个 x 的形式为:\x12,其中\x为⼩写的⼗六进制转义字符,12为⼆位⼗六 进制数)组成的序列,每个⼗六进制数代表⼀个字节(⼋位⼆进制数,取值范围0-255),对于同⼀个 字符串如果采⽤不同的编码⽅式⽣成bytes对象,就会形成不同值。设置python⽂件编码格式。

shenxiaomo1688的博客 430

LeRobot 官方论文:一个用于端到端机器人学习的开源库

本文介绍了一个名为LeRobot的开源库,旨在解决机器人学习领域的碎片化问题。该库提供了端到端的技术栈,包括统一的机器人中间件API、标准化的数据集格式(LeRobotDataset)、优化的推理栈以及多种最先进机器人学习算法的实现。LeRobot支持多种低成本开源机器人平台(如SO-10X、ALOHA-2等),通过共享中间件实现便捷的遥操作和数据收集。其数据集格式已广泛应用于社区,截至2025年9月已有16,000多个数据集公开共享。该库还支持流式处理大规模数据,降低了研究门槛。在模型方面,LeRobot

2506_90492529的博客 906

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

python 字节型转字符串

# bytes object   b = b"example"   # str object   s = "example"   # str to bytes   bytes(s, encoding = "utf8")   # bytes to str   str(b, encoding = "utf-8")   # an alternative m

iwilldoitx的博客 1万+

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

Python3中内置类型bytes和str用法及byte和string之间各种编码转换

主要参考:https://www.cnblogs.com/zanjiahaoge666/p/6402907.html 辅助:http://heathcliff.me/Python-%E4%B8%AD%E7%9A%84-Unicode-string-%E5%92%8C-Byte-string/ 1. 得到一个字符串类型的数据:a 2. python3 下的默认编码为‘utf-8’,因此...

m0_38046027的博客 714

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Python Socket 遇到错误: TypeError: a bytes-like object is required, not 'str'

错误TypeError: a bytes-like object is required, not 'str' 运行环境:python 3.6.7 + pythoncharm   错误:TypeError: a bytes-like object is required, not 'str'   错误原因:从字面意思已经说明是“需要一个字节类型的数据,而不是一个String类型”,反复找了才...

weixin_34041003的博客 644

字符串(str)

字符串(Str)是 Python 中最常用的数据类型。 Python中的字符串通常由单引号''、双引号""、三个单引号或三个双引号包围的一串字符组成。 字符串中的字符可以包含数字、字母、中文字符、特殊字符,以及一些不可见的控制字符,如换行符、制表符等。 字符串是序列的一种,是字符的序列,所以序列的相关操作都适用于字符串。字符串是不可变类型,就是说改变一个字符串的元素需要新建一个新的字符串。 ...

weixin_30520015的博客 219

python转换数据格式_Python 数据格式相互转换

JSON与字典对象相互转换JSON到字典转化:dictinfo = json.loads(json_str) 输出dict类型字典到JSON转化:jsoninfo = json.dumps(dict) 输出str类型 (json格式)json 是字符串在不同语言间约定的一种通用格式,本质上还是字符串类型标准的格式使得 字符串转换成对象,字典等数据结构更加便利字符串与字节相互转换字符串转字节型:...

weixin_39662462的博客 367

python学习笔记

1)语法class 类名:“”“类说明文档”“”类体类名一般使用大驼峰命名法。类体中可以包含类属性(也叫类变量)、方法、实例属性(也叫实例变量)等。并非必须在类定义中进行方法定义,也可以将一个函数对象赋值给一个类内局部变量。#类外定义的函数class C:f = f1Python是一门解释型语言,只有在程序运行后才会执行语法检查。所以,只有在运行或测试程序时,才会真正知道该程序能不能正常运行。Python有两种错误很容易辨认:语法错误和异常。

dangerouszzz的博客 1003

Python基础——数据类型

Python中的数据类型 基本数据类型(不可变): 整型: int Integer 浮点型:float 布尔型:bool (booleam) 字节:byte 字符:char 字符串:string 复杂数据类型: 元组:tuple(不可变) 列表:list 字典:dictionary 集合:set,collection 具体Python中的数据类型定义: 基础数据类型定义:variable_ = value 整型:int 1,2,3,4,5…(正整数和负数,以及0) 小数:float 1.1,2.1 3.

weixin_52367065的博客 242

python wget下载文件处理的一些问题

wget的安装 由于尝试pip安装一直失败,下载了wget3.2的数据包。 解压后运行python setup.py install即可完成安装。 基本使用的下载方法 import wget wget.download(downloadURL,filepathandname) 关于下载链接地址的获取 目前使用的方法:利用urllib得到网页数据,然后规则匹配得

究理观心 3575

python数组溢出_python-3.x - 使用MLPClassifier'得分'方法时出现“预期的数组,得到数组”错误 - 堆栈内存溢出...

我想使用“sklearn.neural_network”lib和mnist数据集训练和测试MLP分类器。 当使用“得分:方法并提供有效数据作为数组时,会发生以下错误:ValueError:期望的数组(数组或非字符串序列),得到数组('B',[7,2,1,0,4, 1,4,9,5,9,0 ......X和Y训练数据集具有相同的长度。 不知道要检查什么才能解决这个问题。 我正在使用Anacond...

weixin_39869593的博客 1061

python中接口测试垃圾数据如何清理_接口测试心得--签名处理(Python)

二、代码实现规则同时也是签名的构造方法,按照上面所列的步骤用Python来实现。获取apiToken:请求参数有3个:appKey:应用KEY(必填项)timestamp: 访问时间戳(必填项),Unix时间戳;signature:签名(必填项)"""Created on 2019年04月03日@author:"""import timeimport hashlibimport requestsi...

weixin_39568232的博客 550

7月5日第一节课总结初稿

7月5日第一节课总结 一、关于数据类型 1.Java的基本数据类型 Java的基本数据类型有8种 整数类型: byte 字节型 8bit -128~127 short 短整型 16bit int 整型 32bit long 长整型 64bit 浮点型: float 单精度 32bit double 双精度 64b...

u011324981的专栏 127
上一篇: Python 十进制转为十六进制
下一篇: Python3 正常显示出十六进制(坑人不浅)
Robin_Pi
博客等级 码龄9年 2万+粉丝 632原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值