ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
>[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测试开发圈”,了解更多测试教程!***