Python 3中bytes/string的区别
2017-08-28 18:25 abce 阅读(24653) 评论(1) 编辑 收藏 举报原文:http://eli.thegreenplace.net/2012/01/30/the-bytesstr-dichotomy-in-python-3
python 3中最重要的新特性可能就是将文本(text)和二进制数据做了更清晰的区分。文本总是用unicode进行编码,以str类型表示;而二进制数据以bytes类型表示。
在python3中,不能以任何隐式方式将str和bytes类型二者混合使用。不可以将str和bytes类型进行拼接,不能在str中搜索bytes数据(反之亦然),也不能将str作为参数传入需要bytes类型参数的函数(反之亦然)。
字符串和字节符之间划分界线是必然的。下面这个图解要牢记于心:
strings可以被编码(encode)成字bytes,bytes也可以解码(decode)成strings:
1 2 3 4 | >>> '€20' .encode( 'utf-8' ) b '\xe2\x82\xac20' >>> b '\xe2\x82\xac20' .decode( 'utf-8' ) '€20' |
可以这样理解:
string是文本(text)的抽象表示。字符串(string)由字符组成,字符也是抽象的实体且与任何二进制表示无关。
当操纵字符串的时候,很多细节是不用了解的。我们可以分割、切片和拼接字符串,在字符串内部进行搜索。但并不在乎内部是如何表示的,也不用在意底层一个字符要花费多少byte。
只有在需要将string编码(encode)成byte的时候,比如:通过网络传输数据;或者需要将byte解码(decode)成string的时候,我们才会关注string和byte的区别。
传入encode和decode的参数是编码方式。编码是一种用二进制数据表示抽象字符的方式。目前有很多种编码。上面给出的UTF-8是其中一种,下面是另一种:
1 2 3 4 | >>> '€20' .encode( 'iso-8859-15' ) b '\xa420' >>> b '\xa420' .decode( 'iso-8859-15' ) '€20' |
编码是这个转换过程中至关重要的一部分。若不编码,bytes对象b'\xa420'只是一堆比特位而已。编码赋予其含义。采用不同的编码,这堆比特位的含义就会大不同:
1 2 | >>> b '\xa420' .decode( 'windows-1255' ) '₪20' |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· .NET10 - 预览版1新功能体验(一)
2016-08-28 12c Grid Infrastructure Management Repository (GIMR)