字符编码

字符编码

  • 前置知识点

1.程序执行的三大核心硬件

CPU

内存

硬盘

正常执行一个程序的要点:

​ 1、将硬盘中的数据读到内存

​ 2、由CPU读内存中的数据进行执行

​ 3、在执行程序的时候,生成的数据,优先存入内存

2.python解释器执行一个py文件的过程

​ 如果没有python解释器,py文件单纯就是一个文本文件,所以,想执行py文件,必须先执行python解释器

​ 1.将python解释器的代码由硬盘读到内存

​ 2.将py文件以普通文本文件的格式由硬盘读到内存

​ 3.python解释器去内存中读取py文件的数据

​ 4.识别python语法,执行相应的操作

python解释器和文本文件编辑器的区别:

1.相同点:前两个阶段二者完全一致,都将硬盘中文件的内容读到内存

2.不同点:文本编辑器将文件内容读到内存后,是为了显示或者编辑,根本不会理会python的用法,但是python解释器将文件内容读到内存后,是为了执行python代码、会识别python语法


  • 字符编码

​ 字符:世界上一切语言、文字

​ 有必要考虑,图片文件、音频文件、视频文件?

文件的输入和输出是两个过程

人类输入的内容都是人类自己可以识别的字符

计算机只能识别二进制字符(101010)

将人类的字符,存入内存和硬盘,要经理一个过程:

人类的字符>>>翻译(字符编码表)>>>计算机二进制


  • 字符编码表

  • ASCII码表(美国)

    计算机起源于美国,所以最先考虑的是让计算机识别英文字符,于是诞生了ASCII表

    • 只有英文字符与数字的一一对应关系
    • 用八位二进制来代表一个英文字符,一个英文字符对应1Bytes,1Bytes=8bit,8bit最多包含256个数字,对应256个字符足够表示所有英文字符
  • GBK表(中国)

    为了让计算机能够识别中文和英文,中国人定制了GBK

    • 只有中文字符、英文字符与数字的一一对应关系

    • 一个英文字符对应1Bytes

      一个中文字符对应2Bytes

      补充:

      1Bytes=8bit,8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符

      2Bytes=16bit,16bit最多包含65536个数字,可以对应65536个字符,足够表示所有中文字符

  • Unicode(万国符)

    为了兼容所有的国家的字符,生成Unicode

    • 存在所有语言中的所有字符与数字的一一对应关系
    • 与传统的字符编码的二进制数都有对应关系
    • 占用存储空间
    • IO次数增加,程序运行速度变慢(最致命)

在Unicode二进制数据存入硬盘的时候,做优化

Unicode与其他编码有相应的映射/转换关系:

文本编辑器输入任何字符都市最新存在于内存中,是Unicode编码的,存放于硬盘中,则可以转换成任意其他编码,只要该编码可以支持相应的字符


  • 编码与解码

    • 编码(encode):由字符转换成内存中的Unicode,以及由Unicode转换成其他编码的过程,都成为编码encode
    • 解码(decode):由内存中的Unicode转换成字符,以及由其他编码转换成Unicode的过程,都成为解码decode

在诸多文件类型中,只有文本文件的内存是由字符组成的,因而文本文件的存取也涉及到字符编码的问题

  • utf-8:全称:Unicode Transformation Format,即Unicode的转换格式
    • utf-8只与Unicode由对应关系
    • 所有的英文字符用1个bytes表示
    • 所有的中文字符用3个btes表示

现在的计算机:

​ 内存都是:Unicode

​ 硬盘都是:utf-8

数据传输:

​ 优先以自己的本国字符编码进行传递

1.用户无论输入什么字符,存入内存,Unicode都可以兼容

2.硬盘中无论是什么编码类型的文件,读到内存,都可以兼容Unicode

Unicode二进制字符(内存)>>>编码(encode)>>>utf-8二进制字符(硬盘)

utf-8二进制字符(硬盘)>>>解码(decode)>>>Unicode二进制字符(内存)

保证不乱码的核心就是:用什么编码存的数据,就用什么编码取

补充

python2:

​ 默认字符编码是ASCII码(因为当时的Unicode还没有盛行)

python3:

​ 默认的字符编码是utf-8

文件头:

# coding:utf-8

告诉你的计算机,你的这个文件是用什么编码写的

用英文字符,是为了让所有计算机都可以识别

pycharm默认的字符编码是:utf-8

Windows默认的字符编码是:GBK

原文地址:https://www.cnblogs.com/YGZICO/p/11822729.html