第八章:字符编码及文件操作

本文详细介绍了字符编码的历史、发展,包括ASCII、GBK、Unicode和UTF-8等。同时,探讨了Python解释器如何处理字符编码,以及解决乱码问题的策略。此外,文章还阐述了文件操作的基础,如open()函数的使用,文件的打开、读写和关闭,以及文件指针的移动等概念。
摘要由CSDN通过智能技术生成

一、字符编码

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互转

        文本编辑器输入任何字

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值