python 入门之 – 字符编码及相应处理方法(二十一)

字符编码及操作方法

今天来了解了解关于字符编码的一些知识,关于字符编码,其实我们生活当中所有的智能设备都有字符编码,并且每个国家都有自己的字符编码,记录着各个国家的文字信息,例如早期的一些网站项目都是用中国的 gbk 编码。

每个国家的计算机编码只能识别自己国家的文字,如果非当前国家编码的文字在计算机文档中会以乱码显示,如早期 PHP织梦CMS 这种,当时这种类型的 CMS 开发出来的时候用的就是 gbk 的编码,所以,如果你用除去中文和 26 个英文字符之外的文字,他是会全部乱码的。

这样一来导致各国语言在互联网上都不能通行,于是欧洲计算机委员会提出方案设计一款通用的国际编码 utf-8 ,这样一来所有国家的网站或者出口的软件包,都能够跨国的进行交互,而不是只停留在当前本土国家通行,所以现在开发都是使用 utf-8 编码,可是在中国 windows 计算机中默认的编码是 gbk ,其他国家也有默认的编码存储在计算机中,那么如果老的项目该怎么运行在他国的电脑上呢,其实 utf-8 编码是从 Unicode 编码转换而来的,并且所有计算机中除去了本国语言包外,还有 Unicode (万国码),什么是 Unicode?

Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

因为我是半路出家自学编程的,我没有科班程序系统性的学习如 CC++Java 等其他语言,我不太清楚别的语言如果出现这种情况该怎么办,我只知道如果 JS 这门语言编码格式为 gbk 可以在引入的时候,在 script 标签上写入 utf-8 就可以了,但也不是绝对,也有极大的可能整个文件需要 copy 出来,然后新建一个文件重新以 utf-8 的标准写入,比较麻烦。当然这是题外话了,回归正传。

其实在 python3 里面已经给我们内置了转换的函数方法如:

encode() : 对内容进行指定编码
decode() : 对内容进行解码( 注意:编码是什么格式,解码就一定要是什么格式,否则会报错 )

例如:

#! -*- coding: utf-8 -*-
str = '中文'
s = str.encode('gb2312')  #指定编码格式为 gb2312 (转码)
print(type(s))

#如下方打印出来的是 bytes
>> <class 'bytes'>

print(s)
#因为编码已经不是 utf-8 了,所以打印出来的是 16进制的
>> b'\xd6\xd0\xce\xc4'

a = s.decode('gb2312')  #将指定的编码转成 Unicode 内置编码 (解码)
print(a)

>> 中文

如上方例子,我在 python 里面其实可以将任意内容随意转换编码,并且解码,而且默认的编码为 Unicode 万国码,所以用 python 可以随意转换内容,后期操作文件,也可以随意转换编码进行新的存储,这样就全自动化了,根本不需要人工手动的去操作,节约了很多的人工成本。

bytes

更具上面的代码其实,执行的第一步,可以看到打印出来的是一个叫做 bytes 的类,那么什么又是 bytes 呢?

byte 就是一个字节,一个文字是由很多个字节组成的,所以在 byte 后面加了一个 s 代表复数,所以是 bytes ,我们的数据都是以 16进制 进行存储的,当解析出来的时候我们所看到的数据其实已经通过 Unicode 进行转码了,变成我们能看懂的数据,但是如果我们用 encode 方法转码后他的类型其实就是 16进制16进制 在计算机中读取还是根据二进制的数据来读取的,所以在这里 16进制 也可以称之为 bytes 类型。

其实我们也可以在 python 代码中直接定义 一个 bytes 类型如:

str = b"张三"
print(type(str))

>> <class 'bytes'>

在字符串前面加上一个 b 代表的就是 bytes 类型的数据,好了关于编码就基本结束了。

猜你喜欢

转载自blog.csdn.net/weixin_43704471/article/details/84713228