Python字符编码补充

字符编码:

Python字符编码贯穿Python学习的始终,现在应用的是Python2中字符编码的问题是很多的。

这次是要彻底解决Python字符编码的问题!!!

1 字符编码的发展过程:

	1 、ASCII :256 美国需要128个字符,只需要7位   --美国
	2、扩展ASCII : 8 比特位  --拉丁
	3、GB2312 :
			中文扩展ASCII 两个字节都大于127   --中国
	4、GBK :
		两个字节,第一个字节大于127
	
	5、Unicode是一种编码方式  两个字节 16
		至少两个字节:2^16 = 65536   
		在Unicode基础上产生utf-8,可变长字符编码
				英文 1个字节,非英文2-6

2 数据的存储形式

内存中的统一是Unicode编码数据的存储是utf-8(硬盘和网络传输)

	存储数据使用utf-8占用空间少
	传输数据快
	
	Unicode(明文对应二进制)这个二进制是16进制格式的
	utf-8(二进制对应二进制)

3 程序执行前:

普通软件的执行是通过调用操作系统,让CPU从内存中获取数据,然后执行。

	文本编辑器的例子:(这是文件的编码)
	**存储:**
		明文---Unicode(内存中)------存储到本地--编码成utf-8的格式存放在硬盘上
	**读取:**
		utf-8解码成Unicode,Unicode解码成中文

4 程序执行中:

Python解释器的有调用执行的功能,首先加载到内存职工需要解码,用什么编码就用什么解码

程序执行中主要是针对的是字符串,Python解释器是逐行执行,文件中的字符串有相应的编码格式,这是最重要的内容。

Python2:

	开头的声明,是解码的声明#coding:utf-8  按照utf-8来解码
	Python2默认是ASCII码进行解码

1 str (数据类型的名字): bytes 数据
定义一个字符串就是字节数据

2 unicode (数据类型的名字): unicode将二进制数据编码成另一种二进制数据 (如utf=8)
**Unicode数据前面有u前缀 **

文件的执行编码

s ="中文"
print repr(s)  #repr函数是将数据显示成字符串的方式

结果:
**'xe4xb8xadxe6x96x87' ** 现在是字节数据

s =u"中文"    #  在字符串的前面加上u  代表Unicode数据类型
print repr(s)

结果是:
u'u4e2du6587' Unicode数据类型

字节数据的解码

#coding:utf-8
#Python2.7

s1 = '中文'
s2 = u'中文'

# print repr(s)
print type(s1)
print type(s1.decode("utf-8"))  # 将字节数据(数据类型是str)通过utf-8解码-->unicode数据类型

结果:
type 'str'
type 'unicode'

数据的编码

#coding:utf-8
#Python2.7

s1 = '中文'
s2 = u'中文'

# print repr(s)
# print type(s1)
# print type(s1.decode("utf-8"))  # 将字节数据(数据类型是str)通过utf-8解码-->unicode数据类型

print type(s2)
print type(s2.encode("utf-8"))  #  将Unicode数据(数据类型是Unicode)通过utf-8编码-->str数据类型
print s2
							   

结果是:

type 'unicode'
type 'str'
中文

Python2给解 释器的是字节数据

python3;
默认是Unicode数据 就是str

1 str(数据类型的名字): unicode 数据

2 bytes(数据类型名字): bytes 数据

	将Unicode数据encode
	将字节数据decode

完全把字节类型和字符类型分开了,不能混用

注意点:

	1 、Unicode   gbk utf-8 都是编码规则
	2 、内存中是Unicode   Unicode作为转换的中转站

关于终端的乱码问题:
在pycharm中执行的时候是通过pycharm的软件执行的,pycharm终端默认是utf-8,Windows的cmd是通过win系统编码格式执行的,win默认是gbk,解码的时候可以在字符的前面添加u,或者解码的方式改成coding:gbk

原文地址:https://www.cnblogs.com/Python666/p/6726938.html