Python和C的字符串

在Python 3 中,bytes单独作为一个类型,不再和str类型混在一起。关于字符串和字节,我想先回顾下C/C++

在C/C++中,字符串是由char数组构成,每个元素是一个Char数据结构,数组的结尾是'\0'空字符。

  1. char是默认的unsigned的整型数据, 用于存储英文字符和小的整数(取值是0-255)。
  2. ASCII是char的子集,因此char很好存储英文字母, 满足存储英文字符的需求。

在C/C++中,int是整型的数据结构。而Python的int被设计成类,它有自己的属性和方法。这是Python和C/C++截然不同的地方。

同样在C/C++中的char整型,到了Python中,相应的是bytes类。我们可以这样说:Python中的Bytes类,本质上是C/C++中的char数组。

如下是几个demo。

1. 对比bytes和string

对于字节:

my_bytes = b'Python'
print(type(my_bytes))
print(my_bytes[0])
print(my_bytes[0] + 1) # 结果:
<class 'bytes'>
80
81

对于字符串:

my_string = 'Python'
print(type(my_string))
print(my_string[0])
print(my_string[0] + 'y') # 结果:
<class 'str'>
P
Py

结论:

  1. 在Python中,bytes和string都是序列类型,它们允许分片操作。
  2. 但是bytes中的+号是运算符,而string中+号是连接符。

从这个意义上,Python仍然保持着与C的一致性。在C中,bytes是char数组,string是以空字符结尾的char数组。+号对于前者是运算,对于后者是连接。

2. 如何用bytes表示125-255的整数型

a_num = b'\xff'
print(type(a_num[0]))
print(a_num[0]) # 结果:
<class 'int'>
255

结论:bytes类是序列,其中每个元素都是int类

字符串----encode--> 转到特定编码的的字节, 字节------decode--> 原生的字符串

字符串有decode方法,而字节是有encode方法。

3.关于decode和encode

str对象有encode方法,而bytes对象有decode方法,如何理解呢?

字符串(以某种编码存储的)----encode--> 转成特定编码的的字节,

字节(被编码的字节)------decode--> 原生的字符串。

name = '你好'                         # 此时"你好"是UTF-8编码存储的字符串
nameBytes = name.encode('utf-16') # 字节
nameStr = nameBytes.decode('utf-16') # 字符串
print(name)
print(nameBytes[0], nameBytes[1], nameBytes[2])
print(nameStr) # 结果:
你好
255 254 96
你好
  1. UTF-8编码的字节序列,总是以0xEF 0xBB开头,所以打印前两位出来是的:228,189
  2. UTF-16编码的字节序列,总是以0xEF 0xBB开头,所以打印前两位出来是的:255,254

因为一种格式编码的字符串可以被转换成其它的编码,所谓encode,本质就是编码的转换。python3中字符串默认是UTF-8编码格式,你可以把它encode成其它格式进行存储,当然,如果你要读取它,必须要以相应的编码格式去解码。

做个游戏

name = '你好'
nameBytes = name.encode('utf-8') # 字节
nameStr = nameBytes.decode('utf-16') # 字符串
print(name)
print(nameBytes[0], nameBytes[1], nameBytes[2])
print(nameStr) # 结果:
你好
228 189 160
뷤붥

我把中文“你好”用utf-8编码,然后用utf-16去解码,得到韩文--- 뷤붥

Python的bytes和str的更多相关文章

  1. python中bytes和str

    1.python中bytes和str Python3 最重要的新特性大概要算是对文本(text)和二进制数据(binary data)作了更为清晰的区分 (1)Python 3.0使用文本和(二进制) ...

  2. 浅析Python中bytes和str区别

    本博转载自:Chown-Jane-Y的浅析Python3中的bytes和str类型 Python 3最重要的新特性之一是对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示, ...

  3. Python 3中的str和bytes类型

    Python3 中的str和bytes类型 Python3最重要的新特性之一是:对字符串和二进制数据流做了明确的区分.文本总是Unicode,由str类型表示,二进制数据则由bytes类型表示.Pyt ...

  4. python编程之字符bytes转换str问题

    之前学习bytes转换str的时候,场景比较简单,这次是python中使用subprocess模块输出Linux下的执行命令的结果,默认是bytes类型,因此输出的结果并不是我们想要的,bytes的输 ...

  5. python的str,unicode对象的encode和decode方法, Python中字符编码的总结和对比bytes和str

    python_2.x_unicode_to_str.py a = u"中文字符"; a.encode("GBK"); #打印: '\xd6\xd0\xce\xc ...

  6. Effective Python(3)- 了解 bytes 与 str 的区别

    Python 有两种类型可以表示字符序列 bytes:实例包含的是原始数据,即 8 位的无符号值(通常按照 ASCII 编码标准来显示) str:实例包含的是 Unicode 码点(code poin ...

  7. python bytes和str之间的转换

    1 # bytes object 2 b = b"example" 3 4 # str object 5 s = "example" 6 7 # str to ...

  8. python中bytes类型转换为str类型

    使用的原因:基于URL解析报文的时候,要使用str类型,但是提供的确实bytes类型,报错: TypeError: must be str, not bytes 所以就把bytes类型转换为str类型 ...

  9. #utf-8与gbk转换 #bytes 和str 的转换

    #!/user/bin/env python # -*- coding:utf-8 -*- temp = "连接" temp_unicode = temp.decode('utf- ...

随机推荐

  1. tomcat中文乱码

    1. https://blog.csdn.net/qq_35038153/article/details/78430359 2. 1.修改apache-tomcat-9.0.14-windows-x6 ...

  2. 用Eclipse的maven方式创建JFinal项目

  3. web3 编译部署调用合约

    //导入solc 编译器 let solc = require('solc') let fs = require('fs') //读取合约 let sourceCode = fs.readFileSy ...

  4. MLflow系列3:MLflow项目

    英文链接:https://mlflow.org/docs/latest/projects.html 本文链接:https://www.cnblogs.com/CheeseZH/p/11945432.h ...

  5. 均值为1的独立指数随机Y1,Y2,组合成的Y=Y1-(Y2-1)^2/2 在Y>0的条件下也是指数随机变量

    均值为1的独立指数随机Y1,Y2,组合成的Y=Y1-(Y2-1)^2/2  在Y>0的条件下也是指数随机变量 另一个条件分布 13题有错误,应该是P{x<X<x+dx,y<Y& ...

  6. CRM 负责人 选择

    CRM 负责人 参与 - 搜狗搜索https://www.sogou.com/sgo?query=CRM+%E8%B4%9F%E8%B4%A3%E4%BA%BA+%E5%8F%82%E4%B8%8E& ...

  7. 解决Linux系统下面javamelody图片中文乱码问题

    从windows系统中,copy了C:\Windows\Fonts\msyh.ttc和msyhbd.ttc 2个文件到 服务器的%JAVA_HOME%\jre\lib\fonts\fallback 目 ...

  8. PHP 简易网页访问统计

    传统的网页访问统计,已经有很多,如 51la.百度统计.站长统计 一般都需要引用JS,在你的网页内嵌入JS,这个操作存在风险,并且不可控. 可以考虑使用 [img src.css src.link h ...

  9. JAVA中try、catch、finally带return的执行顺序总结

    异常处理中,try.catch.finally的执行顺序,大家都知道是按顺序执行的.即,如果try中没有异常,则顺序为try→finally,如果try中有异常,则顺序为try→catch→final ...

  10. PS,大鹏视频,UI美工设计, 精品课程视频(500G)

    PS,大鹏视频,UI美工设计, 精品课程视频(500G 左右) ,需要的可以加我QQ 358918610 //--------------------------------------------- ...