show | version | enable_checker |
---|---|---|
step |
1.0 |
true |
- 数字字符编码从
博多码
到ascii
、8859-1
各自割据 - 如何把世界上各种字符统进行编码
unicode
顺势而生不断进化- 不过数量超过了
65536
2
个字符放不下
- 究竟应该用几个字节理解存储的这些字节呢?🤔
1字节
省空间 可是范围窄3字节
非空间 可是范围广
- utf-8是一种可变长度的字符编码格式
- 有的时候1字节 利用他空间小
- 有的时候3字节 利用他范围广
- 这不就两个好处都得到了么
- utf-8的意思是Unicode Transformation Format – 8-bit
- 这和unicode到底有什么区别呢?
- Unicode是
字符集编码
- Universal Coded Character Set
- 字符集:为每一个
字符
分配一个唯一的数字ID
- (学名为码位 / 码点 / Code Point/字符的身份证号)
- 可以在https://home.unicode.org/找到每一个字符的唯一编码
- utf-8是
编码规则
- Unicode Transformation Format – 8-bit
- 编码规则:将「码位」转换为字节序列的规则(编码/解码 可以理解为 加密/解密 的过程)
- 而且读到字符系统就知道这个到底是几个字节存储的
- 那这个东西怎么具体存储和操作呢?
- 一(4E00) 属于第三行的范围
- 从0800-FFFF
- 所以三个字节
- 如下图套入模板
- 首先进入vi
- 然后在插入模式下写一个
一
- :%!xxd
一
字存储的状态确实是e4b8b0- utf-8编码E4B080转化为unicode编码是4E00
- 后面的
0a
是 换行LineFeed
- 或者叫做
NL(NewLine)
- 第一次编码
- 把汉字编码为
unicode
- 具体就是把
一
编码为unicode值0x4e00
- 把汉字编码为
- 第二次编码
- 把
unicode
值编码为utf-8
值 - 具体就是把 unicode值
0x4e00
编码为0xe4b880
- 把
- 第一次解码
- 把
utf-8
解码为unicode
- 具体就是把 utf-8 值
0xe4b880
解码为0x4e00
- 把
- 第二次解码
- 把
unicode
解码为汉字 - 具体就是把
0x4e00
解码为一
- 把
#我们具体到游乐场试一下
python3
#原始字符串
"一"
#查看原始字符串utf-8编码
"一".encode("utf-8")
#给utf-8编码解码
b"\xe4\xb8\x80".decode("utf-8")
#先编码再解码
"一".encode("utf-8").decode("utf-8")
#先解码再编码
b"\xe4\xb8\x80".decode("utf-8").encode("utf-8")
- b"\xe4\xb8\x80"是什么类型呢?
- 前缀b表示byte字节
- 后面字符串是bytes 类型对应的字节
- \x是前缀
- b"\xe4\xb8\x80"是三个字节的序列
- utf-8是系统默认的编码格式
- 一般都是这种编码格式
- 这一个字就有三个字节
- 可以用长度来描述字符么?
- len()函数
- 可以衡量出字符串的长度
- 也可以衡量出编码后字节的长度
- 字母
a
对应着一个字节 - 汉字
一
对应着三个字节 - 这个区间究竟是怎么安排的呢?
- 这样的话所有字符被分成了4档
- 1字节部分ascii
- 后面的字符有可能用2字节、3字节、4字节
- 英文字符和数字占据最大范围兼容ascii
- unicode把法文等其他字符排出1字节空间
- 2字节主要是拼音符号文字
- 拉丁
- 希腊
- 西里尔
- 等等
- 3字节范围内
- 首先是印度
- 然后是杂项
- 然后是符号
- 日文假名
- 然后是中日韩CJK
- 4字节
- 各种扩展集
- unicode开始逐渐流行
- 一旦一种编码在世界上开始流行
- 他就会挤压其他的编码方式的生存空间
- 到了2020年95%的网页使用unicode编码
- 到了2021已经达到了97.4%
- 感觉这是全球化一体最终的编码方式
- 但是有的时候我们还会遇到gb2312编码的文档
- 有的时候用utf-8打开gb18030编码的文件就会乱码
- 这个时候可以在vim中使用命令
:edit ++enc=gb18030
- 可以解决问题
utf-8
是一种可变长度的编码方式utf-8
是实现unicode
的存储和传输的现实的方式- 这个
unicode
让字符范围得到了极大扩展 - 到底扩展出什么好玩的字符呢?🤔
- 我们下次再说!👋