字符编码

image-20211228110336859

image-20211228110244163

世界编码

ASCII

单字节编码,有128个字符可以显示

python2 的默认编码

python 使用 ord() 函数查看

JavaScript 使用 "".codePointAt() 函数查看

ISO-8859-1

单字节编码

与 ASCII 原理相同,只不过拓展到了256个字符

Unicode

多字节编码

代码点 (Code Point):在Unicode 代码空间中的一个值

image-20211228155559742

UTF-32

UTF-32 是早期编码格式,固定为4个字节大小

image-20211228160522986

UTF-8

python3 的默认编码

image-20211228160828542

第一范围:7比特

第二范围:5比特+6比特

第三范围:4比特+6比特+6比特

第四范围:3比特+6比特+6比特+6比特

中国编码

大陆早期:GB2312

大陆现在:GBK

港澳台:Big5

例子🤡

这个例子我们通过查看🤡这个图标查看它的码点(Codepoints)最后手动写16进制进行 UTF-8 编码和 UTF-32 编码最后通过文件打开,检验是否成功。

第一步,查看码点:

image-20211228160128505

码点十进制是129313,在第四个范围中(65535-1114111),故储存在计算机中为4字节。

1
2
3
4
5
6
7
8
9
>>> bin(0x1F921)
'0b11111100100100001'
# 调整为 UTF-8 编码
0b11110000
0b10011111
0b10100100
0b10100001
>>> hex(0b11110000100111111010010010100001)
'0xf09fa4a1'

往文件中写入f09fa4a1,成功显示:

image-20211228162138645

通过直接将码点转为二进制,即为 UTF-32

1
2
3
4
>>> bin(0x1F921)
'0b11111100100100001'
# 手动补齐为4字节
0x0001F921

image-20211228163928856

Link

【你懂乱码吗?锟斤拷烫烫烫(详解ASCII、Unicode、UTF-32、UTF-8)-哔哩哔哩】 https://b23.tv/7uq0gLw