一直在用python2.7对其编码问题一直傻傻分不清,每次遇到问题都是百度,问题解决了,但是不总结,每次都需要百度,如死循环一般,今天痛下决心,搞清楚概念,大话聊聊,python编码的问题
百度了很多概念,首先是要从python编码和计算机内存编码说起。。。。。
一、python2,python3,计算机操作系统的默认编码
1.python2 默认编码的是ASCII ,ASCII编码是:大小写英文字母、数字和一些符号
2.python3 默认编码是utf-8, utf 是unicode 编码设计的一种存储和传输时候节省空间的编码方案(还有utf-16)
3.计算机内存默认编码是万国码 unicode ,unicode 相当与编码界的大Boss啦,包含了全世界所有的语言
二、编辑器和内存的关系
1.打开编辑器,相当于开启一个进程,进程是在内存中执行的,保存写入的编辑器的内容,相当于从内存保存到硬盘的过程
2.再次打开已经保存的硬盘中的py文件,就是从硬盘读入内存,在内存中解释执行py文件
三、字符编码
经过一个过程:
字符--------(翻译过程)------->数字
这个过程实际就是一个字符如何对应一个特定数字的标准,这个标准称之为字符编码。
四、字符编码的使用
因为python2 中不能自动的把文件编码转化为unicode存在内存中,所以需要decode 解码和encode编码
utf-8 ———————>decode(解码)—————————>unicode
unicode————————>encode(编码)————————>GBK/utf-8
执行结果是这样的:
1.utf-8转GBK打印乱码了,utf-8 不能直接转化为gbk ,首先是先将utf-8转化为unicode,在用 unicode 转为gbk
2.如果服务端encode的编码格式是utf-8, 客户端内存中收到的也是utf-8编码的二进制
四、终端编码问题
windows 是gbk,文件为utf-8打印就会有乱码问题,需要将utf-8转化成unicode再转为gbk
"测试".decode('utf-8').encode('gbk'),才能打印出测试
mac的终端编码是GB2313,unicode ,utf-8等,可以设置很多所以无论打印gbk还是utf-8,还是unicode都不会乱码
#coding=utf-8
s="测试"
print s
print type(s)
print repr(s)
t=s.decode('utf-8').encode('gbk')
y=s.decode('gbk')
h=s.decode('utf-8').encode('utf-8')
r=s.decode('utf-8')
print t ,y, h,r
print type(t),type(y),type(h),type(r)
print repr('\xe6\xb5\x8b\xe8\xaf\x95'.decode('utf-8'))
print u'\u6d4b\u8bd5'.encode('gb2312')
运行结果
娴嬭瘯
'\xe6\xb5\x8b\xe8\xaf\x95'
测试 濞村鐦?娴嬭瘯 娴嬭瘯
u'\u6d4b\u8bd5'
测试