python3中的bytes和string

原文链接:https://www.cnblogs.com/abclife/p/7445222.html

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‘

原文地址:https://www.cnblogs.com/m-zhang-yang/p/9356876.html

时间: 2024-08-04 21:38:23

python3中的bytes和string的相关文章

python3 中的bytes类型

原文地址:https://www.cnblogs.com/lovejh/p/9200946.html

Python3中bytes和HexStr之间的转换

1 Python3中bytes和HexStr之间的转换 ByteToHex的转换 def ByteToHex( bins ): """ Convert a byte string to it's hex string representation e.g. for output. """ return ''.join( [ "%02X" % x for x in bins ] ).strip() HexToByte的转换 de

python2 与python3中最大的区别(编码问题bytes&str

1,在python2.x 中是不区分bytes和str类型的,在python3中bytes和str中是区分开的,str的所有操作bytes都支持 python2 中 >>> s = "abcdefg" >>> b = s.encode()    #或者使用下面的方式 >>> b = b"abcdefg">>> type(b)<type 'str'> python3中     #str

Python3 中的 str 和 bytes

Python3 中的 str 和 bytes 与 Python2.X 不同,Python3.X 严格区分了 str 和 bytes 两种类型.文本为 Unicode,由 str 类型表示:二进制数据则由 bytes 表示. Python3.X 不会以任意隐式的方式混用 str 和 bytes.因此使用者不能拼接字符串和字节包,也无法在字节包里搜索字符串(反之亦然),也不能将字符串传入参数为字节包的函数(反之亦然). 例如 Python3.X 中的socket.send()函数,如果传入未编码的字

由 Python2 和 Python3 中 socket.inet_aton() 实现不同引发的血案

这几天在做一个功能实现的时候,需要把别人用 Python2.6 写好的脚步转成 Python3.4 实现,大部分地方转化都没啥问题,但是在 socket.inet_aton() 转化的过程中出了点问题,花费我不少的精力去解决,先做个记录备忘,同时给后续需要的人做个提醒. 首先说一下,我在解决这个问题前期的思路有点问题,所以请关注最后的总结. 需求目的:把一个 ip 地址使用 socket.inet_aton() 转化后和一个字符串组合,然后算出 MD5. 下面是 Python2.6 的实现代码:

python3中使用builtwith的方法(很详细)

1. 首先通过pip install builtwith安装builtwith C:\Users\Administrator>pip install builtwith Collecting builtwith Downloading builtwith-1.3.2.tar.gz Installing collected packages: builtwith Running setup.py install for builtwith ... done Successfully install

python之模块配置文件ConfigParser(在python3中变化较大)

# -*- coding: utf-8 -*- #python 27 #xiaodeng #python之模块ConfigParser(在python3中为configparser) #特别注意:python3和python2关于该模块的功能用法有很大的不同. #配置文件解析器 import ConfigParser,os #初始化一个配置文件对象 config=ConfigParser.ConfigParser() #增加一个section config.add_section('Sectio

Python2爬虫获取的数据存储到MySQL中时报错&quot;Incorrect string value: &#39;\\xE6\\x96\\xB0\\xE9\\x97\\xBB&#39; for column &#39;new&#39; at row 1&quot;的解决办法

由于一直使用python3进行编码,在使用Python2时,将爬虫数据连接数据库进行存储时,出现如上的报错,经查资料 是数据库编码问题. 如下转自:http://www.cnblogs.com/liuzhixin/p/6274821.html 的博客,在此感谢博主的慷慨分享之情. 错误原因:我们可以看到错误提示中的字符0xF0 0x9F 0x98 0x84 ,这对应UTF-8编码格式中的4字节编码(UTF-8编码规范).正常的汉字一般不会超过3个字节,为什么为出现4个字节呢?实际上是它对应的是智

关于Python3中函数:

# 关于Python3中函数: - 定义 定义函数使用关键字def,后接函数名和放在圆括号()中的可选参数列表,函数内容以冒号起始并且缩进.一般格式如下:``` def 函数名(参数列表): """文档字符串""" 函数体 return [expression] ``` - 函数变量作用域 在函数内部定义的变量拥有一个局部作用域,在函数外定义的拥有全局作用域.注意:在函数内部可以引用全局变量,但无法对其赋值(除非用global进行声明).```