Python学习week4-bytes,bytearry与字符编码

1、bytes与bytearray

# bytes:不可变字节序列; bytearray:字节数组,可变数据类型;

(1)bytes定义

class bytes(object):
    """
    (1)bytes(iterable_of_ints) -> bytes
    (2)bytes(string, encoding[, errors]) -> bytes
    (3)bytes(bytes_or_buffer) -> immutable copy of bytes_or_buffer
    (4)bytes(int) -> bytes object of size given by the parameter initialized with null bytes # 指定字节的bytes,被0填充;
    b=bytes(10) # 创建10个字节的bytes;
    print(b)   # ==> b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00'; (5)bytes() -> empty bytes object # 创建空bytes;

#  注意:bytes类型,使用b前缀定义;

  只允许基于ASCII使用字符串形式b'abc9'表示

  使用16进制表示b'\x41\x61'

(2)bytearray定义  

class bytearray(object):
    """
    bytearray(iterable_of_ints) -> bytearray
    bytearray(string, encoding[, errors]) -> bytearray
    bytearray(bytes_or_buffer) -> mutable copy of bytes_or_buffer
    bytearray(int) -> bytes array of size given by the parameter initialized with null bytes
    bytearray() -> empty bytes array
# b=bytearray(5)
# print(b) # bytearray(b'\x00\x00\x00\x00\x00')

2、字符编码

2.1、 什么是字符编码?

# 个人理解为:将人类理解的字符<===>翻译过程<===>计算机能够识别的数字;

# 这个过程就是讲字符如何对应一个特定的数字的标准,这个标准即为:‘字符编码’;

2.2、字符编码表

(1)ASCII码表

# 由于计算机最早是美国人发明的,所以有了第一张英文字符集与计算机数字对应的表;

# ASCII:一个Bytes代表一个字符,1Bytes=8bit,8bit可以表示0-2**8-1=256个字符;

(2)GBK编码表

# GBK:2Bytes代表一个中文字符,1Bytes表示一个英文字符;==>GB2312(ANSI)==>GBK==>GB18030;(解决了中文与计算机识别数字对应关系)

(3)Unicode万国码

# Unicode(定长):统一用2Bytes代表一个字符;与全世界所有的字符编码都有映射关系,这样就可以转换成任意国家的字符编码;Unicode只是存放了与其他编码的映射关系;

(4)utf-8(可变长)

# 对于英文来说,如果采用Unicode则存储空间浪费太多(1倍),UTF-8:英文字符1Bytes,中文字符采用3Bytes;

# 总结:内存中统一采用Unicode编码;硬盘可以采用各种编码方法存储数据,一般采用UTF-8编码;

2.3、编码(encode)与解码(decode)

# 通常来说:读取文件需要decode(解码),写入文件需要encode(编码);

编码过程:字符== >字节流;计算机处理的是字节流而不是字符,所以编码是以特定的方式把字符变成字节流;

解码过程:字节流==>字符;

#  具体过程如下:

从硬盘读取文件到内存:utf-8 ==>decode==>unicode

从内存将文件保存到硬盘:unicode==>encode==>utf-8

# 注意:保证不乱码的原则为:

(1)以什么编码格式存文件,就以什么编码格式取(读)文件;

(2)例如:如果以ascii编码格式存中文,则一定乱码,存的时候数据就损坏了;一定要在编码支持范围内存取和读取文件;

2.4、python字符编码应用

# python3的解释器默认utf-8编码,python2的解释器默认为ascii编码;所以默认python3解释器支持识别中文;

# 以python test.py为例:(执行test.py的第一步一定是将文件内容从硬盘读取到内存中)

# 将test.py的内容:

line1:# coding:gbk

line2:“你好

line3:x=‘你好’

以GBK编码格式保存;

# 分析整个程序的运行过程:

(1)第一阶段:启动python解释器

(2)第二阶段:python解释器此时就是一个文本编辑器,负责打开test.py,即从硬盘中读取test.py的内容到内存;

# 此时python解释器读取test.py的第一行内容# coding:gbk,来决定以什么编码格式读入到内存,这一行是用来设定python解释器这个软件的编码格式;

# 可以使用sys.getdefaultencoding()查看,如果在文件开头没有指定,python2则使用ascii编码,python3则为unicode;

(3)第三阶段:读取已经加载到内存的test.py代码(unicode格式编码),然后执行;执行过程中可能会开辟新的内存空间,次内存空间和之前的是不同的2个空间;

# 例如:执行到x=‘nihao’,会申请新的内存空间,然后以unicode的编码方式存在内存中;

(4)关于终端打印print

# 例如: print(x) 输出实际时候用的是终端的编码,保证不乱码则需要,文件的读,存以及打印的终端的编码格式一致;

转载于:https://www.cnblogs.com/soulgou123/p/9492641.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值