>[info]在计算机中,经常遇到编码问题,本节主要梳理下ascii,unicode,utf8,gbk 这几种编码之间的关系。
>
## ASCII
计算机中,所有数据都以0和1来表示。在一开始的时候,要表示的内容比较少,人们使用了ascii编码的方式来编码。
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,**`其最多只能用 8 位来表示`**(一个字节),即:2\**8 -1 = 255,所以,ASCII码最多只能表示 255 个符号。
1 1 1 1 1 1 1 1 =2\**0+2\**1+2\**2+2\**3+2\**4+2\**5+2\**6+2\**7 = 2\**8-1=255
<br>
## Unicode,UTF-8,GBK
随着计算机的发展,显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
**Unicode**(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。Unicode规定所有字符和符号**`最少使用2字节`**(16位)来表示,即2**16-1=65535
**UTF-8**,`是对Unicode编码的压缩和优化`,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用`1个字节`保存、欧洲的字符用`2个字节`保存,东亚的字符用`3个字节`保存...
**GBK**,也是`基于Unicode编码的进一步优化`,GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用`双字节`来表示
## python 中的编码使用规则
1. `在python2默认编码是ASCII`, `python3里默认是utf-8`
2. unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-8就是unicode
3. 在py3中encode,在`转码的同时还会把string 变成bytes类型`,decode在`解码的同时还会把bytes变回string`
![](https://box.kancloud.cn/a3d92b1214b5b35b786cd01733c64f65_505x320.jpg)
由上图分析可得:
**GBK转UTF-8的流程**
1. 首先需要通过解码【decode】转换回Unicode编码
2. 然后通过编码【encode】转换成UTF-8编码
**UTF转GBK的流程**
1. 首先需要解码【decode】转换会Unicode编码
2. 然后通过编码【encode】转换为GBK编码
## 建议
所有的地方,建议统一使用utf-8编码。包括py编译,ide的设置,文件的读写等。
<hr style="margin-top:100px">
:-: ![](https://box.kancloud.cn/2ff0bc02ec938fef8b6dd7b7f16ee11d_258x258.jpg)
***微信扫一扫,关注“python测试开发圈”,了解更多测试教程!***
- 前言
- chapter01_开发环境
- chapter02_字符串的使用
- chapter03_列表的使用
- chapter04_字典的使用
- chapter05_数字的使用
- chapter06_元组的使用
- chapter07_集合的使用
- chapter08_输入输出
- chapter09_控制流程
- chapter10_实例练习_登录1
- chapter11_python函数入门
- chapter12_python中的类
- chapter13_轻松玩转python中的模块管理
- chapter14_掌握学习新模块的技巧
- chapter15_通过os模块与操作系统交互
- chapter16_子进程相关模块(subprocess)
- chapter17_时间相关模块(time & datetime)
- chapter18_序列化模块(json)
- chapter19_加密模块(hashlib)
- chapter20_文件的读与写
- chapter21_阶段考核2_登录
- chapter22_小小算法挑战(排序&二分法)
- chapter23_用多线程来搞事!
- chapter24_HTTP接口请求(requests)
- chapter25_接口测试框架(pytest)
- chapter26_阶段考核3_HTTP接口测试
- chapter27_HTML解析(pyquery)
- chapter28_阶段考核4_爬虫下载网易汽车
- chapter29_python中的那些编码坑
- chapter30_MySQL数据库操作
- chapter31 高级特性_迭代器与生成器
- chapter32 高级特性_装饰器
- chapter33 高级特性_列表处理