一、字符编码介绍
1、什么是字符
我们学习python的过程中接触的到字符串类型,其中包含的
文字、英文字母或者符号等都是字符。
2、什么是编码
我们写下的都是人类能理解的字符。但是计算机只能理解
1和0数字,所以为了让计算机能输入输出我们人类的字符,
就要让计算机知道这些字符。这就是编码,将字符变写成
对应的二进制数字。
3、什么是解码
解码就是将计算机存储的对应字符的二进制提取出来,并
进行翻译,输出我们人类能认识的字符。
分析过程
x="上"
内存中
上-------翻译-----》0101010
上《----翻译《-----0101010
4、编码的发展
根据计算机的发展,出现了编码的概念。现代计算机起源于美国
所以为了让计算机能明白字母,美国人发明了与字母对应的表ASCII码
表。
ASCII表:
1、只支持英文字符串
2、采用8位二进制数对应一个英文字符串
随着计算机的发展,中国人为了让计算机能识别中文与字母,于是
发明了GBK表。每个国家都为了让计算机能识别自己的文字,都设计
了不同的编码方式,制作了各自的字符编码表。
GBK表:
1、支持英文字符、中文字符
2、采用8位(8bit=1Bytes)二进制数对应一个英文字符串
采用16位(16bit=2Bytes)二进制数对应一个中文字符串
随着各国均发展出了各种的字符编码表,每个国家都可以使用计算机
但是问题又随之而来。我们想进行国际交流怎么办?
同一组二进制码在不同的国家可能代表不同的字符,我用自家的编码
解码方式去处理别的国家的文件,肯定会出现乱码。这样交流起来就乱套了。
所以万国码unicode出现了。
unicode(内存中统一使用unicode):
1、兼容万国字符
与万国字符都有对应关系
2、
采用16位(16bit=2Bytes)二进制数对应一个中文字符串
个别生僻会采用4Bytes、8Bytes
unicode表:
内存
人类的字符---------unicode格式的数字----------
| |
| |
|
硬盘 |
|
| |
| |
GBK格式的二进制 Shift-JIS格式的二进制
软件是存放于硬盘中的,软件如果要运行则需要读入到内存中,这时就需要一种编
码可以将硬盘中的数据读入到内存中。为了让我们的计算机能够正常运行,不出现乱码
,这时就需要内存中有可以识别、转译万国编码的编码方式。这就是unicode的产生的
缘由。
字符都是通过内存转换存储到硬盘中的,在内存中的unicode可以将字符转换成
任意格式的字符编码。其他字符编码格式的字符也都可以转换成unicode,但是不
同的编码格式不能通过unicode互转。
理论上是可以将内存中unicode格式的二进制直接存放于硬盘中的,但由于unicode
固定使用两个字节来存储一个字符,如果多国字符中包含大量的英文字符时,使用
unicode格式存放会额外占用一倍空间(英文字符其实只需要用一个字节存放即可),
然而空间占用并不是最致命的问题,最致命地是当我们由内存写入硬盘时会额外耗
费一倍的时间,所以将内存中的unicode二进制写入硬盘或者基于网络传输时必须
将其转换成一种精简的格式,这种格式即utf-8(全称Unicode Transformation Format,
即unicode的转换格式)
utf-8:
英文->1Bytes
汉字->3Bytes
结论:
1、内存固定使用unicode,我们可以改变的是存入硬盘采用格式
英文+汉字-》unicode-》gbk
英文+日文-》unicode-》shift-jis
万国字符》-unicode-》utf-8
2、文本文件存取乱码问题
存乱了:解决方法是,编码格式应该设置成支持文件内字符串的格式
取乱了:解决方法是,文件是以什么编码格式存如硬盘的,就应该以什么编码格式读入内存