python字符串转成0x字节组_python高级(四)—— 文本和字节序列(编码问题)

本文介绍了Python3中字符与字节的区别,包括字符的Unicode定义,字节的两种类型(bytes和bytearray),以及它们之间的转换。详细讲解了编码解码过程中的BOM鬼符问题,字符的标准化Unicode表示,以及Unicode文本的排序方法。通过实例展示了如何处理字符编码错误,以及在不同场景下如何选择合适的编码解码策略。
摘要由CSDN通过智能技术生成

本文主要内容

字符

字节

结构体和内存视图

字符和字节之间的转换——编解码器

BOM鬼符

标准化Unicode字符串

Unicode文本排序

字符

'''字符编码问题是经常困扰python编程人员的问题,我在编写爬虫的过程中也经常遇到这个头疼的事。

从python3开始,明确区分了人类语言(文本字符串)和机器语言(二进制字节),咱们先说文本字符串

开始之前,得对"字符"进行定义:

字符:Unicode字符,从python3的str对象中获取的元素是Unicode字符

字符串:字符串就是一个字符序列(这里对于(一)中内容相呼应)'''

if __name__ == "__main__":#创建字符

s1 = str('a')

s2= 'b's3= u'c'

print(s1, s2, s3) #a b c

此时只用记住在python3中字符就是unicode,也就是str是unicode,这是人类能够看懂的语言。

字节

'''python3中内置有两种基本的二进制序列类型:不可变的bytes和可变bytearray

(1)bytes和bytearray的各个元素是介于0~255(8个bit)之间的整数;

(2)二进制序列的切片始终是同一类型的二进制序列'''

if __name__ == "__main__":#创建bytes 和 bytearray

b1 = bytes('abc你好', encoding='utf8') #关于encode稍后会说,不知道有没有人和我一样总是将编码与解码的方向混淆

print(b1) #b'abc\xe4\xbd\xa0\xe5\xa5\xbd'

b2= bytearray('abc你好', encoding='utf8')print(b2) #bytearray(b'abc\xe4\xbd\xa0\xe5\xa5\xbd')

#切片(提示:序列都可以切片)

print(b1[3:5]) #b'\xe4\xbd'

print(b2[3:5]) #bytearray(b'\xe4\xbd')

#使用列表取值的方法试试

print(b1[3]) #228 此时取出来的就不是字节序列了,而是一个元素

for _ inb1:print(_, end=',') #97,98,99,228,189,160,229,165,189, 这都是8bit的整数

#bytes的不可变 vs. bytearray的可变

#b1[3] = 160 # 报错:'bytes' object does not support item assignment

print(id(b2), b2) #4373768376 bytearray(b'abc\xe4\xbd\xa0\xe5\xa5\xbd')

b2[2] = 78

print(id(b2), b2) #4373768376 bytearray(b'abN\xe4\xbd\xa0\xe5\xa5\xbd')

#将b2转换成字符串看看

print(b2.decode('

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值