字符编码

1、计算机基础知识.

  运行程序的三个核心硬件分为:CPU、内存、硬盘

  任何一个程序想要运算,必须先有硬盘加载到内存,然后CPU去内存取相对应指令。

  运行着的应用程序所产生的数据必先存储在内存里。

2、Python解释器运行一个py文件(xxx.py)的原理

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

(2)将xxx.py以普通文本文件形式读到内存

(3)python读取文件内容,识别python语法,执行相应操作

  补充:普通的文本编辑器与python解释器前两步都是一样的

3、字符编码

  字符编码针对的是文字,只跟文本文件有关。不需要考虑视频文件和音频文件。

  文本变字符的输入和输出是两个过程人在操作计算机的时候输入的是 人能看懂的字符,但是计算机只能识别二进制,那么就有

  输入的字符 >>>(字符编码表)>>> 二进制数字

(1)ASCII码

用八位二进制表示一个英文字符 说有的英文字符+符号最多也就125左右

(2)GBK码

用2bytes表示一个中文字符,还用1bytes表示英文字符。

(3)万国码Unicode

统一使用2bytes表示所有的字符

缺点:浪费空间,随着io次数增加,程序运行效率降低。

  当内存中的unicode编码格式数据存在硬盘的时候,就会按照utf-8编码。会将Unicode的英文字符改为1bytes,会将中文字符改为3bytes。现在的计算内存都是Unicode,硬盘都是utf-8。

4.Unicode的两个特点

1.用户在输入的时候,无论输入什么字符都可以兼容万国字符。

2.其他国家编码的数据由硬盘读取到内存的时候Unicode与其他各个国家的编码都有对应关系。

(1).数据由内存保存在硬盘

  内存中的Unicode格式二进制数字 >>>编码(encode)>>>

硬盘中的数据由硬盘读到内存

(2).硬盘中的utf-8格式的二进制数据 >>>解码(decode)>>

  补充:为了确保不乱码,文本格式是以什么编码的就要以什么格式解码

(3)python2和python3的不同点

  python2:将py文件按照文本文件读入解释器中默认使用ASCII码(因为开发Python2解释器时Unicode还没有盛行)

  python3:将py文件按照文本文件读入解释器默认使用utf-8

4.文件头

# coding:utf-8

1.因为所有的编码都支持英文字符,所以文件头可以正常生效.

基于python解释器开发的软件,只要是中文,前面都需要加一个U

2.在python2中,(当你不指定文件头的时候,默认用ASCII存储数据,如果指定文件头那么就按照文件头的编码格式存储数据)

python3中字符串默认就是Unicode编码格式的二进制

补充:

  (1).pycharm终端用的是utf-8格式

  (2).Windows终端采用的是gbk

  (3).乱码:字符不能够正常显示 因为编码和解码的格式不一致

例如:

x = ''
resl = x.encode('gbk')#将Unicode编码成可以存储和传输的utf-8的二进制数据
print(resl)#b'xe4xb8x8a 输出的是二进制
# bytes类型 字节串类型 你就把他当做二进制数据即可
res2 = resl.decode('gek') #将硬盘中的utf-8格式的二进制数据解码成Unicode格式的二进制数据
print(res2) #输出的是汉字
原文地址:https://www.cnblogs.com/blue-tea/p/11140883.html