字符编码

一、字符编码介绍

内容参考:https://zhuanlan.zhihu.com/p/108805502 egon老师

1.1 什么是字符编码

  计算机要想工作必须通电,即用‘电’驱使计算机干活,也就是说‘电’的特性决定了计算机的特性。电的特性即高低电平(人类从逻辑上将二进制数1对应高电平,二进制数0对应低电平),关于磁盘的磁特性也是同样的道理。结论:计算机只认识数字

  很明显,我们平时在使用计算机时,用的都是人类能读懂的字符(用高级语言编程的结果也无非是在文件内写了一堆字符),如何能让计算机读懂人类的字符?

  必须经过一个过程:
  #字符--------(翻译过程)------->数字

  #这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码

1.2 字符编码的应用场景

#1、一个python文件中的内容是由一堆字符组成的,存取均涉及到字符编码问题(python文件并未执行,前两个阶段均属于该范畴)

#2、python中的数据类型字符串是由一串字符组成的(python文件执行时,即第三个阶段

1.3 字符编码的发展

第一阶段:ASCII码

计算机由美国人发明,最早的字符编码为ASCII,只规定了英文字母数字和一些特殊字符与数字的对应关系。最多只能用 8 位来表示(一个字节),即:2**8 = 256,所以,ASCII码最多只能表示 256 个符号

第二阶段:GBK、shift-JIS....

此时,美国人用的计算机里使用字符编码标准是ASCII、中国人用的计算机里使用字符编码标准是GBK、日本人用的计算机里使用字符编码标准是Shift_JIS,如下图所示,

上图原理如下:

文本文件内容全都为字符,无论存取都是涉及到字符编码问题
#1、存文本文件
人类通过文本编辑器输入的字符会被转化成ASCII格式的二进制存放于内存中,如果需要永久保存,则直接将内存中的ASCII格式的二进制写入硬盘

#2、读文本文件
直接将硬盘中的ASCII格式的二进制读入内存,然后通过ASCII表反解成英文字符

GBK编码格式:

# GBK表的特点:
    1、只有中文字符、英文字符与数字的一一对应关系
    2、一个英文字符对应1Bytes
       一个中文字符对应2Bytes   
       补充说明:
       1Bytes=8bit,8bit最多包含256个数字,可以对应256个字符,足够表示所有英文字符
       2Bytes=16bit,16bit最多包含65536个数字,可以对应65536个字符,足够表示所有中文字符

第三阶段:Unicode

#1. 存在所有语言中的所有字符与数字的一一对应关系,即兼容万国字符

#2. 与传统的字符编码的二进制数都有对应关系,详解如下

文本编辑器输入的字符最先都是存于内存之中,在内存之中我们统一使用Unicode。存放于硬盘时,则将Unicode转换成所需格式。

# 英文字符可以被ASCII识别
英文字符--->unciode格式的数字--->ASCII格式的数字

# 中文字符、英文字符可以被GBK识别
中文字符、英文字符--->unicode格式的数字--->gbk格式的数字

# 日文字符、英文字符可以被shift-JIS识别
日文字符、英文字符--->unicode格式的数字--->shift-JIS格式的数字

二、编码解码

encode

decode

 详细介绍可参考:https://zhuanlan.zhihu.com/p/108805502

三、字符编码的应用

3.1 保存字符

  保存时,我们需注意,若存在中文,但是以shift-JIS编码的格式存入,则中文部分甚至整个文本数据将存成乱码。此时数据将会丢失,无法还原。

3.2 取出代码

 3.3 执行程序时字符串存储

预知详情:

(轻量版)https://zhuanlan.zhihu.com/p/108805502

(史上最全版)https://www.cnblogs.com/linhaifeng/articles/5950339.html

原文地址:https://www.cnblogs.com/zhubincheng/p/12482815.html