博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bytes数据类型和字符串的编码解码,三元运算,进制互换
阅读量:6874 次
发布时间:2019-06-26

本文共 1836 字,大约阅读时间需要 6 分钟。

三元运算

如果这个条件成立就存这个值,如果那个条件成立就存那个值。

进制

bytes类型,字节数据类型也就是二进制类型,这个是python3专有数据类型,在python2里跟字符串是一个类型,也就是python2是不区分这个数据类型的

比如说音频,视频文件都是二进制类型,也就是bytes类型。(python3通过socket在网络上传输数据时必须要用二进制格式,python2没有强制必须是二进制,字符串也可以

Python3中最大的新特性就是对文本和二进制数据做了更清晰的区分。文本通常是Unicode字符集,并且用str字符串类型表示,而二进制数据用bytes字节类型表示。在Python3中,字符串str和字节bytes是不可以混合使用的,这也使得二者之间更以区分。你不能将字符串和字节连接起来,不能在字符串中得到字节,也不能在字节中得到字符串,也不能通过函数传参字符串以期望得到字节,反之亦然。

py3里,只有 unicode编码格式 的字节串才能叫作str

其他编码格式的统统都叫bytes,如:gbkutf-8gb2312…………

这些bytes要转换为 unicode编码 才能当作str来用,就需要知道 bytes 的编码格式。

如果你事先知道,比如gbk,就可以用 bytes.decode('gbk')将bytes解码为unicode字符。
如果很不幸,你有一堆bytes,不知道它们的编码(例如 网站服务器返回的响应体),
这时候,你就需要chardet 来测试它们的编码。

 

字符串和字节间是由区别的,下面的关系应该牢记在心:

字符串可被编码为字节,字节可被解码为字符串

可以这样考虑,字符串是文本的一种抽象表示。一个字符串有很多字符组成,字符是与任何特定二进制表示无关的抽象实体。处理字符串时,可以对其进行分割、切片、连接、搜索操作。我们不关心字符串在内部是如何被表示的,也不关心它用几个字节来表示每个字符。只有在将字符串编码成字节(如用于通信信道的传输)或将字节解码成字符串时,才考虑这些问题。

编码可以将抽象字符以二进制数据的形式表示,有很多编码方法,如utf-8。编码是传输过程中非常重要的一部分,没有编码,字节对象只是一簇二进制位。是编码让位有意义。对位进行不同编码可获得不同结果。

string 通过encode 编码成 bytes 类型,而bytes格式的数据又可以通过decode来解码成str类型。
 
encode 用来对string格式个数据进行编码:
str = '你好'str.encode('UTF-8') -->表示源数据是什么格式的,为UTF-8,非常重要一定要填写!!!虽然默认为utf-8,请一定要填写!python2默认使用系统的编码acsiib'\xe4\xbd\xa0\xe5\xa5\xbd'

 

decode 用来对bytes格式的数据进行解码:
str = b'\xe4\xbd\xa0\xe5\xa5\xbd'str.decode('UTF-8') -->表示把二进制数据解释成 什么格式的数据(默认UTF-8),非常重要一定要填写!!!

str.encode("UTF-8")
str.encode(encoding='UTF-8') 
str.decode("UTF-8")
str.decode(encoding='UTF-8') 
这两个编码的写法是一样的
 
saysay='我爱北京天安门'print(saysay)print(saysay.encode(encoding='utf-8'))print(saysay.encode(encoding='utf-8').decode(encoding='utf-8'))

 

注意了,由于在网络编程里传输必须是byte类型,那么如果你传输的是英文字母或者数字的话,下面的三种写法都是一样的:

aaa="abc123".encode("UTF-8")
aaa="abc123".encode(encoding='UTF-8') 
aaa=b"abc123"
但是如果你的字符串是中文的话,那么必须写成:
aaa="大家好".encode("UTF-8")
aaa="大家好".encode(encoding='UTF-8') 
而aaa=b"大家好"是非法的
 
也就是ASCII码是可以前面直接加b来表示byte类型的,但是非ASCII码的就不可以这样了。
 
 
 
你可能感兴趣的文章
Android Studio HelloWorld
查看>>
Windows命令点滴
查看>>
BZOJ-1040: [ZJOI2008]骑士 (树形DP)
查看>>
MS CRM 2011的自定义和开发(10)——CRM web服务介绍(第二部分)——IOrganizationService(二)...
查看>>
【Summary】ANSYS TRANSIENT ANALYSIS
查看>>
Unity3D性能优化--- 收集整理的一堆
查看>>
全面理解Unity加载和内存管理
查看>>
JMeter接口测试示例(二)
查看>>
swift -- 单例+ lazy懒加载 + 第三方库
查看>>
The Zen of Python, by Tim Peters
查看>>
SQL日期格式转换
查看>>
移动互联网下半场的面试真经,让你进入 BAT 不再是梦
查看>>
Windows 下 Hbuilder 真机调试(Android,iphone)
查看>>
async和await
查看>>
称霸Kaggle的十大深度学习技巧
查看>>
只需3步,即可将你的Chromium Edge 浏览器设置成中文
查看>>
【270】IDL处理GeoTIFF数据
查看>>
【071】我的博客园中的插件源码
查看>>
SQL Server 查看空间使用情况的 5 种方法
查看>>
SQL Server dbcc checkdb 做了什么。
查看>>