字符编码及操作方法
今天来了解了解关于字符编码的一些知识,关于字符编码,其实我们生活当中所有的智能设备都有字符编码,并且每个国家都有自己的字符编码,记录着各个国家的文字信息,例如早期的一些网站项目都是用中国的 gbk
编码。
每个国家的计算机编码只能识别自己国家的文字,如果非当前国家编码的文字在计算机文档中会以乱码显示,如早期 PHP
的织梦CMS
这种,当时这种类型的 CMS
开发出来的时候用的就是 gbk
的编码,所以,如果你用除去中文和 26 个英文字符之外的文字,他是会全部乱码的。
这样一来导致各国语言在互联网上都不能通行,于是欧洲计算机委员会提出方案设计一款通用的国际编码 utf-8
,这样一来所有国家的网站或者出口的软件包,都能够跨国的进行交互,而不是只停留在当前本土国家通行,所以现在开发都是使用 utf-8
编码,可是在中国 windows
计算机中默认的编码是 gbk
,其他国家也有默认的编码存储在计算机中,那么如果老的项目该怎么运行在他国的电脑上呢,其实 utf-8
编码是从 Unicode
编码转换而来的,并且所有计算机中除去了本国语言包外,还有 Unicode
(万国码),什么是 Unicode
?
Unicode
是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。
因为我是半路出家自学编程的,我没有科班程序系统性的学习如 C
、C++
、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
类型的数据,好了关于编码就基本结束了。