二:ASCII码与二进制转换(计算机如何把二进制转化成文字)
三:字符编码的演化(如何支持中文)
四:总结python字符编码
一、二进制转换
342
512 256 128 64 32 16 8 4 2 1
# 1 0 1 0 1 0 1 1 0
1代表需要+
0代表不需要+
342 = 256 + 64 + 16 + 4 + 2
100
64 32 16 8 4 2 1
# 1 1 0 0 1 0 0
298
256 128 64 32 16 8 4 2 1
# 1 0 0 1 0 1 0 1 0
>>> bin(342)
'0b101010110'
>>> bin(100)
'0b1100100'
>>> bin(298)
'0b100101010'
二、ASCII和十进制和二进制之间的转换三:字符编码的演化(如何支持中文)
1、中国就发明了自己的对照表用来支持中文、后来台湾、日本、韩国等等国家都出现了自己的对照表、用来识别自己的语言。
2、为了解决每个国家不同编码之间不想互通的问题ISO标准组织出马了!
出了Unicode编码:
但是对比之前的ASCII码、有缺陷,占用的空间会浪费、本来一个英文字母占用1b、导致占用2b!
所以ISO标准组织吗又出了UTF-8
四、总结Python字符编码
python解释器在加载 .py 文件中的代码时,
会对内容进行编码(默认ascillASCII(American Standard Code for InformationInterchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,
主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。显然ASCII码无法将世界上的各种文字和符号全部表示,所以,就需要新出一种可以代表所有字符和符号的编码,即:Unicode Unicode(万国码)是一种在计算机上使用的字符编码。
Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536.
UTF-8,是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存...
所以,python解释器在加载 .py 文件中的代码时,会对内容进行编码(默认ascill),如果是如下代码的话:
[root@test01 ~]# cat 2.py
#/usr/bin/env python
name = "你好,世界"
print (name)
报错:ascii码无法表示中文
[root@test01 ~]# python2 2.py
File "2.py", line 2
SyntaxError: Non-ASCII character '\xe4' in file 2.py on line 2, but no encoding declared; see http://www.python.org/peps/pep-0263.html for details
改正:应该告诉python解释器,用什么编码来执行源代码
[root@test01 ~]# cat 1.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
name = "你好,世界"
print (name)
[root@test01 ~]# python2 1.py
你好,世界
python2中的文件默认编码为:ASCII python2中字符串(内存里)的默认编码也是 ASCII码
备注:如果文件头声明了gbk,那字符串(内存里)的编码也是gbk
ython3中的文件默认编码为:utf8、所以python默认支持中文、
python3中字符串(内存里)的默认编码是unicode
上文中的例子中用python2打印中文报错、就是因为ASCII码不支持中文