一、字符编码
1、字符编码的执行原理
字符串类型、文本文件的内容都是由字符组成。但凡涉及到字符的存取,必须要考虑字符编码的问题。
1、计算机三大核心部件的关系
所有的软件都是运行在操作系统上的,而操作系统是运行在计算机硬件上的,与软件运行相关的三大核心硬件是:CPU、内存和硬盘。
- 1、软件运行前,软件中的代码及其相关的数据都存放于硬盘中。
- 2、软件启动时,先将数据从硬盘存入内存,然后 CPU 从内存中读取指令并执行。
- 3、软件运行过程中产生的数据都是先存放在内存中,若想永久保存数据,必须由内存写入硬盘。
2、 文本编辑器读取文件内容的流程
三个阶段:
- 1、启动文本编辑器。
- 2、文本编辑器将文件内容从硬盘读入内存。
- 3、文本编辑器将内存中读入的内容显示到屏幕上。
3、python解释器执行文件的流程
以python demo.py为例
三个阶段:
- 1、启动python解释器,相当于启动文本编辑器。
- 2、python解释器,从硬盘上将demo.py文件的内容读取到内存中。
- 3、python解释器解释执行读取到内存中的内容,开始识别python语法
4、python解释器与文本编辑器的差异
相同:
- 前两个阶段完全一致,都是将硬盘中文件的内容读取到内存中。
- python解释器是解释执行文件内容,所以python解释器具备读py文件的功能,与文本编辑器一样。
区别:
- 在第三阶段时,内存中读取的内容处理方式不同。
- 文本编辑器将文件内容读取到内存后,是为了显示或者编辑,不去理会python语法,就是为了让我们瞅一眼代码写的什么。
- python解释器将文件内容读取到内存后,是为了执行python代码、识别python语法。
2、定义
1、什么是字符编码
人与计算机进行交互时,用的都是人能读懂的字符,如:中文字符、英文字符
- 计算机是基于电工作的,电的特性就是高低电频,人类从逻辑层面将高电频对应为数字1,低点频对应为数字0。这就是**计算机只能识别二进制**的由来。
- 所以,人能识别的字符与计算机能识别的字符必须经过翻译。翻译的标准称为字符编码表,该表上存放的就是字符与数字的一一对应关系。字符编码中的**编码**就是翻译或**转换**的意思,即将人能理解的字符翻译为计算机能识别的数字。
目的:将人类的语言转换成计算机能识别的语言
3、字符编码发展史概述
三个阶段:
1、计算机起源于美国,所以最优先考虑是让计算机识别英文字符,于是诞生了ASCII表。
ASCII表的特点:
-
1、只有英文字符与数字的一一对应关系
-
2、一个英文字符对应1Bytes,1Bytes=8bit,8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符
-
3、实际上7bit就足够表示所有的英文字符,用8bit的目的是方便以后英文有新的字符添加作准备。
2、计算机迅速发展阶段
因为计算机只能识别英文字符,不方便其他国家用户的使用。所以在此基础上各个国家都制定了自己的字符编码表,只能识别自己国家的官方字符和英文字符。
如:中国的GBK,能够识别中文字符和英文字符
GBK表的特点:
- 1、只有中文字符、英文字符与数字的一一对应关系
- 2、一个英文字符对应1Bytes 一个中文字符对应2Bytes
- 补充:
- 1Bytes=8bit,8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符 2Bytes=16bit,16bit最多包含65536个数字,可以对应65536个字符,足够表示所有中文字符
文本文件内容全都为字符,无论存取都是涉及到字符编码问题
1、存文本文件
- 国人通过文本编辑器输入的字符会被转化成GBK格式的二进制存放于内存中,如果需要永久保存,则直接将内存中的GBK格式的二进制写入硬盘
2、读文本文件
- 直接将硬盘中的GBK格式的二进制读入内存,然后通过GBK表反解成英文字符
文件无论是存还是取由于采用的字符编码表一样,所以肯定不会出现乱码问题。但问题是在美国人用的计算机里只能输入英文字符,而在中国人用的计算机里只能输入中文字符和英文字符……。
我们希望计算机允许我们输入万国字符均可识别、不乱码,而现阶段计算机采用的字符编码ASCII、GBK都无法识别万国字符,所以必须定制一个兼容万国字符的编码表。
3、万国字符unicode
unicode于1990年开始研发,1994年正式公布。
- 1、兼容万国字符,与万国字符都有对应关系。
- 2、与传统的字符编码的二进制数都有对应关系
- 3、采用16位(16bit=2Bytes)二进制数对应一个中文字符串个别生僻会采用4Bytes、8Bytes
很多地方或老的系统、应用软件仍会采用各种各样传统的编码,这是历史遗留问题。软件是存放于硬盘的,而运行软件是要将软件加载到内存的,面对硬盘中存放的各种传统编码的软件,想让我们的计算机能够将它们全都正常运行而不出现乱码,内存中必须有一种兼容万国的编码,并且该编码需要与其他编码有相对应的映射/转换关系,这就是unicode的第二大特点产生的缘由。
4、老的字符编码都可以转换成unicode,但是不能通过unicode互转
文本编辑器输入任何字