python_字符编码

一 了解字符编码的知识储备

1.计算机基础知识node

2.电脑存放组成:python

硬盘 - 内存 -(二级缓存、一级缓存、cpu寄存器)- cpu

# cpu交互的是用户能识别的数据:字符
# 硬盘中最终存储的数据:0,1的二进制数据(能够直接转化为电脑能识别的高低电频)
3.文本编辑器存取文件的原理(nodepad++,pycharm,word)
#一、打开编辑器就打开了启动了一个进程,是在内存中的,因此,用编辑器编写的内容也都是存放与内存中的,断电后数据丢失

#二、要想永久保存,须要点击保存按钮:编辑器把内存的数据刷到了硬盘上。

#三、在咱们编写一个py文件(没有执行),跟编写其余文件没有任何区别,都只是在编写一堆字符而已

4.python解释器执行py文件的原理 ,例如python test.py编程

#第一阶段:python解释器启动,此时就至关于启动了一个文本编辑器

#第二阶段:python解释器至关于文本编辑器,去打开test.py文件,从硬盘上将test.py的文件内容读入到内存中(小复习:pyhon的解释性,决定了解释器只关心文件内容,不关心文件后缀名)

#第三阶段:python解释器解释执行刚刚加载到内存中test.py的代码( ps:在该阶段,即真正执行代码时,才会识别python的语法,执行文件内代码,当执行到name="egon"时,会开辟内存空间存放字符串"egon")

5.总结python解释器与文件本编辑的异同缓存

#一、相同点:python解释器是解释执行文件内容的,于是python解释器具有读py文件的功能,这一点与文本编辑器同样

#二、不一样点:文本编辑器将文件内容读入内存后,是为了显示或者编辑,根本不去理会python的语法,而python解释器将文件内容读入内存后,可不是为了给你瞅一眼python代码写的啥,而是为了执行python代码、会识别python语法。

2、字符编码介绍

1. 什么是字符编码网络

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

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

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

  #这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码
  
# 字符编码:将人识别的字符转换计算机能识别的01,转换的规则就是字符编码表
 

2.涉及到字符编码的问题编程语言

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

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

3.字符编码的发展史与分类编辑器

计算机由美国人发明,最先的字符编码为ASCII,只规定了英文字母数字和一些特殊字符与数字的对应关系。ide

最多只能用 8 位来表示(一个字节),即:2**8 = 256,因此,ASCII码最多只能表示 256 个符号编码

固然咱们编程语言都用英文没问题,ASCII够用,可是在处理数据时,不一样的国家有不一样的语言,日本人会在本身的程序中加入日文,中国人会加入中文。spa

而要表示中文,单拿一个字节表表示一个汉子,是不可能表达完的(连小学生都认识两千多个汉字),解决方法只有一个,就是一个字节用>8位2进制表明,位数越多,表明的变化就多,这样,就能够尽量多的表达出不通的汉字

因此中国人规定了本身的标准gb2312编码,规定了包含中文在内的字符->数字的对应关系。

日本人规定了本身的Shift_JIS编码

韩国人规定了本身的Euc-kr编码

# 最先期对应关系:ascii编码表 - 存放的是英文数字与机器二进制的对应关系
# 数字70对应ascii表,指向的是字母'F'
print(chr(70))  # 'F'
print(ord('f'))  # 102

# 字符所占字节数
# 1字节 = 8个二进制位 00000000 ~ 11111111 256个数字 -128 ~ 127

# 中文
# GBK: 16个二进制位 15个0到15个1
# 兼容ascii,一个字母或数字占一个字节
# 2w多汉字,用两个字节进行存储

# 国际上交流:
# 一条信息中,可能同时出现英文/中文/日文/韩文,将全部信息存储,且不乱码
# 万国编码表:unicode
# unicode采用两个字节存放数据:utf-8,utf-16
# utf-8采用变长存储:1字节存放数字与英文,3字节存放汉字
# utf-16采用定长存储:均以2字节存放数字,英文,汉字

# 内存中用utf-16存取数据:定长存取效率高(变长须要计算后才存取)
# cpu中与硬盘中,采用utf-8存放数据(utf-8传输更快)

4.总结字符编码的发展可分为三个阶段

#阶段一:现代计算机起源于美国,最先诞生也是基于英文考虑的ASCII
ASCII:一个Bytes表明一个字符(英文字符/键盘上的全部其余字符),1Bytes=8bit,8bit能够表示0-2**8-1种变化,便可以表示256个字符
ASCII最初只用了后七位,127个数字,已经彻底可以表明键盘上全部的字符了(英文字符/键盘的全部其余字符),后来为了将拉丁文也编码进了ASCII表,将最高位也占用了

#阶段二:为了知足中文和英文,中国人定制了GBK
GBK:2Bytes表明一个中文字符,1Bytes表示一个英文字符
为了知足其余国家,各个国家纷纷定制了本身的编码
日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里

#阶段三:各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。如何解决这个问题呢???#一、可以兼容万国字符
#二、与全世界全部的字符编码都有映射关系,这样就能够转换成任意国家的字符编码
# 总结:内存中统一采用unicode,浪费空间来换取能够转换成任意编码(不乱码),硬盘能够采用各类编码,如utf-8,保证存放于硬盘或者基于网络传输的数据量很小,提升传输效率与稳定性。

6.字符编码总结

# 一、但凡出现乱码问题,必定是编码时用了一套字符编码,解码时用了另外一套字符编码
# 二、解决乱码问题核心:编码时用什么编码存,解码时就用什么编码解
# 三、python3解释器默认使用utf-8    Python2解释器默认使用ASCII
# 四、文件开头:#coding:gbk 用来告诉解释器读文件内容时,用什么编码
# 五、Python3中str类型内存用的是Unicode编码的二级制

3、字符编码转换

# 原文本字符串数据
# s1 = 'abc123你好'
s1 = u'abc123你好'
print(s1)

# 二进制字符串数据: 数据传输是以字节为单位,要将原文字符串转换为二进制字符串机械能传输

# 编码
res = s1.encode('utf-8')
print(res)
# 解码
s2 = res.decode('utf-8')
print(s2)

ss2 = b'abc123\xe4\xbd\xa0\xe5\xa5\xbd\xe5\xa5\xbd\xe5\xa5\xbd'
print('>>', ss2.decode('utf-8'))

# 原义字符串数据
s3 = r'你好\n好的'
print(s3)

# s4 = 'D:\\nbpython\\day03\\代码\\4.三种字符串.py'
# print(s4)
s4 = r'D:\nbpython\day03\代码\4.三种字符串.py'
print(s4)
字符编码转换
相关文章
相关标签/搜索