学习语言之前,来看看计算机是怎么识别你的代码的。。。
ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)
如同电路只能识别'开'跟'关',计算机则只能识别 '0' 跟' 1'两个字符,就是说计算机只能识别‘二进制’语言。那么你想打印‘hello world’,计算机怎么识别并打印出来呢?
美国就创造了一套编码机制,用8位0,1,不同的排列组合表示不同的字符(数字,字母,特殊字符)。这就是最早的编码ASCII码。其中第128位是0111 1111:‘DEL’。(8位能表示2**8=256位字符)
显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode
Unicode(统一码、万国码、单一码)是一种在计算机上使用的字符编码。Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定所有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536
万国码:unicode :
A: 0000 0010 0000 0010 两个字节,表示一个字符。
中: 0000 0010 0000 0010 两个字节,表示一个字符。
后来加入的预言越来越多,再次升级:
A: 0000 0010 0000 0010 0000 0010 0000 0010 四个字节,表示一个字符。
中: 0000 0010 0000 0010 0000 0010 0000 0010 四个字节,表示一个字符。
所以Unicode对于美国来说,简直太浪费空间了。明明8位二进制(相当于1个字节)可以表示,却要用2个字节。所以,又创造了一个utf-8编码。
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
utf-8:最少用一个字节,表示一个字符.
A: 0000 0010
欧洲:0000 00100000 0010
中文:0000 00100000 00100000 0010
python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果含有中文代码的话,需要告诉python解释器,用utf-8编码来执行源代码
# -*- coding: utf-8 -*-
gbk,这是国内创造的编码,简称国标
gbk国标。
A: 0000 0010
中: 0000 0010 0000 0010
编码之python:
python3x:
1,不同编码之间的二进制是不能互相识别的。
2,python3x
str内部编码方式(内存)为unicode
但是,对于文件的存储,和传输不能用unicode
bytes类型:内部编码方式(内存)为非unicode
#对于英文
str:
s = 'laonanhai' 表现形式
内部编码方式 unicode
bytes:
s1 = b'laonanhai' 表现形式
内部编码方式 非unicode (utf-8,gbk,gb2312....)
#对于中文:
str:
s = '中国'
print(s,type(s))
bytes:
s1 = b'\xe4\xb8\xad\xe5\x9b\xbd'
print(s1,type(s1))
#转码
s = 'laonanhai'
s2 = s.encode('utf-8') #str -->bytes encode 编码
s3 = s.encode('gbk')
print(s2,s3)
s = '中国'
s2 = s.encode('utf-8') #str -->bytes encode 编码
s3 = s.encode('gbk')
print(s2)
print(s3)
ss = s2.decode('utf-8') # bytes ---> str decode 解码
print(ss)