python学习09_bytes

本文详细介绍了字符集、编码体系如ASCII、GBK、Unicode和UTF-8的工作原理,以及程序员在处理字符串时常见的字节操作,包括编码和解码的过程。特别强调了UTF-8的可变长度特点及其在不同语言文字中的应用。
摘要由CSDN通过智能技术生成

一、bytes简介

1. 字符集和编码

0 1 ==> 101010101 ==> 二进制转化成十进制 == > 88
电脑如何储存文字信息
10000 < == > a
最早统一标准:ascii 决定了每一个符号对应的二进制编码
ascii 编排了128个文字符号,只需要7个0和1就可以表示了,01111111 => 1 byte => 8 bit(位)

ANSI => 一套标准,规定每个字符 16bit,2byte => 最多存放65536个符号
eg:00000000 01111111
到china,形成gb2312编码,(扩充)gbk编码(windows默认是这个)
到taiwan,形成big5编码
到japan,形成JIS编码

但同一编码在不同国家可能对应不同字符,因此出现了
unicode:万国码。
早起unicode并没有意识到中国这么多的文字量。USC-2 2个字节
后续进行扩充,USC-4 4个字节(32bit,4byte)
======= ↓===========
utf:可变长度的unicode,可以进行数据的传输和存储 -> 行书、草书、隶书
utf-8:最短的字节长度8
英文:8bit,1byte
欧洲文字:16bit,2byte
中文:24bit,3byte
utf-16:最短的字节长度16

总结:

  1. ascii:8bit,1byte
  2. gbk:16bit,2byte(windows默认)
  3. unicode:32bit,4byte(没法用,只是一个标准)
  4. utf-8:(mac默认)
    英文:8bit,1byte
    欧洲文字:16bit,2byte
    中文:24bit,3byte
  5. gbk和utf-8不能直接就进行转化
    我军密码本 -> 文字 -> 敌军密码本

2. 字节bytes

2.1 程序员平时遇见的所有的数据最终单位都是字节byte

举例:

s = "周杰伦"
bs1 = s.encode("gbk")  # b'xxxx' bytes类型
bs2 = s.encode("utf-8")
print(bs1)
print(bs2)
print(type(bs1))
print(type(bs2))

返回结果:
在这里插入图片描述

2.2 字节转化

如何将一个gbk的字节转化成utf-8的字节?
先解码(变成文字符号(字符串)),再重新编码
举例:

bs = b'\xd6\xdc\xbd\xdc\xc2\xd7'
# 先变成文字符号(字符串)
s = bs.decode("gbk")  # 解码
bs2 = s.encode("utf-8")  # 重新编码
print(bs2)

总结:

操作操作内容
str.encode(“编码”)进行编码
bytes.decode(“编码”)进行解码

特殊现象:

s = "你好abc呵呵哒"
print(s.encode("utf-8"))

返回结果里abc字母返回就是其本身,符合sacii标准的东西到哪里都能显示
在这里插入图片描述
ascii:a:01100001
gbk:a:00000000 01100001
实际上gbk两个字节前面的没用啊,后面跟ascii一样

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

枯木逢春24

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值