​鲁迅曾经说

没有被编码格式困扰过的程序员

注定留有遗憾

常言道

常在路上跑

​哪能不摔倒

摔倒快起身

躺着睡更好

书归正传

躺归躺

闹归闹

决不能拿写代码开玩笑

毕竟我代码很大 健壮

你忍一下

~~~~~~~~~~~~~~优雅~~~~~~~~~~~~~~

一、ASCII码

       首先熟悉下,什么叫ASCII码?想要直接看代码的小伙伴直接跳过,看第三部分。

       ASCII ((American Standard Code for Information Interchange): 美国信息交换标准代码)是基于拉丁字母的一套电脑编码系统。ASCII第一次以规范标准的类型发表是在1967年,最后一次更新则是在1986年,到目前为止共定义了128个字符。

二、中文编码

       ASCII码表示西文字符是用7位的ASCII码,为了在计算机中存储,最高位(第八位)默认为0,所以可以表示2的7次方个不同的字符;扩展的ASCII码,使用的第八位,不在默认为0,所以最多可以表示2的8次方个字符。

       中文却不大一样。中文的一个汉字占16位,也就是两个字节的位置。编码方式跟ASCII码类似,但是为了与ASCII码区别开来,最高位默认为1。这里需要注意的一点是,部分编码格式,中文占三个字节。因此,如果含有中文,编码格式错误经常会导致乱码的发生。

     国标码是 用于计算机之间或与终端之间信息交换时的汉字代码(GB2312,GBK,GB18030), 由连续的两个字节组成,每个字节七位有效,最高位为1。

        正常汉字的显示处理也非常复杂:

三、编码转换

       字符转换。字符的转换很简单,一般借助ord方法可以直接转换,转换的结果就是对应的ASCII码。中文的编码格式为Unicode,和UTF、GBK等一样,他也是一种编码方式。

       接下来的代码以Python为例。

字符串转换。字符串的转换,就相对复杂一些。在Python3下,内存中默认编码方式为Unicode。Unicode编码类似于世界上的英语,是一种通用的编码方式,他可以表示所有的字符。

        所以,如果全世界都是用Unicode编码的话,从此将不再有乱码问题。但是计算机中最重要的两种资源:时间和空间。全部使用Unicode编码,带来的空间消耗是ASCII编码的两倍。

       本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。

       Python3中的字符串,是unicode,只能encode,所以无论如何打印都不会乱码,因为可以理解为从内存打印到内存,即内存->内存,unicode->unicode

       str是unicode,当程序执行时,无需加u,str也会被以unicode形式保存新的内存空间中,str可以直接encode成任意编码格式,s.encode('utf-8'),s.encode('gbk')

       

       所以,当使用不同编码方式去编码字符串的时候,可以看到不同编码方式转换的结果:

# -*- encoding:utf8 -*-
import string
​
​
str_test="西安"
​
print(str_test)
str_gbk = str_test.encode('gbk')
print(str_gbk)
str_utf8 = str_test.encode('utf8')
print(str_utf8)
​

编码格式互转:

# -*- encoding:utf8 -*-
import string
​
​
str_test="西安"
​
print(str_test)
str_gbk = str_test.encode('gbk')
print(str_gbk)
str_utf8 = str_test.encode('utf8')
print(str_utf8)
​
str_gbk = str_test.encode('gbk')
print(str_gbk.decode('gbk'))
str_utf8 = str_test.encode('utf8')
print(str_utf8.decode('utf8'))

写在最后,欢迎关注公众号【头发头发等等我】

另外,建了个微信群,除了打广告,什么都可以聊

 

Logo

旨在为数千万中国开发者提供一个无缝且高效的云端环境,以支持学习、使用和贡献开源项目。

更多推荐