码迷,mamicode.com
首页 > 编程语言 > 详细

python与编码

时间:2017-07-01 15:19:45      阅读:223      评论:0      收藏:0      [点我收藏+]

标签:结果   占用   ima   字母   文字   用两个   alt   使用   二进制   

编码的概念

    编码就是将信息从一种格式转换为另一种格式。也就是说,将我们所认识的内容转换为计算机所认识的二进制格式就是一种编码的行为,而计算机将二进制格式的内容解码成我们所认识的内容。

    最早的时候计算机使用的编码规则是ASCII码,ASCII码最早是美国人使用的。ASCII码用一个字节的二进制组来表示一个字符(因为他们只用到26个引文字母和一些符号,最初的ASCII码甚至只用到7个bit位)。

    随着计算机的日益普及,ASCII码难以满足世界各地人们的使用,在中国就出现了GB2312与GBK的编码方式,使用两个字节的二进制组表示一个字符(甚至强硬的占用了拉美等国家的最高bit位)。正因为如此,世界各地都使用自己的编码方式,各自的软件都无法兼容了,所以就出现了万国码。

    万国码(Unicode)覆盖了全世界所有的文字,这也太强大了,那我们使用万国码不是很方便吗?但是对于美国人来说,他们只需要使用一个字节就可以表示所有的字符,而现在却平白无故多出一个字节,这使得内存与硬盘浪费了空间,所以Unicode优化成了现在的utf-8格式。utf-8是可变长的编码方式,所以现在开发倾向于使用这种编码方式。但是现在依然很多地方在使用GBK,ASCII等编码方式,所以对于编码我们需要详细的了解。

python2的编码

    python2中默认编码方式是ASCII码。

name = 杰夫     #str类型为bytes
name2 = u杰夫   #将字符串类型改为Unicode
print  repr(name)
print  repr(name2)


运行结果
\xbd\xdc\xb7\xf2
u\u6770\u592b

    在python2中str字符串类型在内存中存的是bytes类型,Unicode类型字符串存储的是Unicode数据。

    

name = 杰夫                #name为字节数据类型
name2 = u杰夫            #name为unicode数据类型
name3 = name.decode(utf8)
name4 = name2.encode(utf8)
print type(name3)
print type(name4)
print repr(name)
print repr(name2)
print repr(name3)
print repr(name4)
运行结果
<type unicode>
<type str>
\xe6\x9d\xb0\xe5\xa4\xab‘  #str字符串类型的bytes数据
u\u6770\u592b‘             #Unicode字符串类型的Unicode数据
u\u6770\u592b‘             #str字符串类型解码成Unicode数据
\xe6\x9d\xb0\xe5\xa4\xab‘  #Unicode字符串类型编码成bytes数据

python3的编码

    python3中默认的编码方式是utf-8.

name = bjeff
name2 = 杰夫
print(type(name))
print(repr(name))
print(type(name2))
print(repr(name2))
运行结果
<class bytes>
bjeff
<class str>
杰夫

    python3中str字符串类型在内存中存的是Unicode数据,bytes类型字符串存储的是bytes数据。

name = bjeff
name2 = 杰夫
name3=name.decode(utf8)
name4=name2.encode(utf8)
print(type(name))
print(type(name2))
print(type(name3))
print(type(name4))
print(repr(name))
print(repr(name2))
print(repr(name3))
print(repr(name4))
运行结果
<class bytes>
<class str>
<class str>
<class bytes>
bjeff‘                         #bytes类型字符串存储的bytes数据
杰夫‘                           #str类型字符串存储的Unicode数据
jeff‘ #bytes类型字符串解码成Unicode数据 b\xe6\x9d\xb0\xe5\xa4\xab‘ #str类型字符串编码城bytes数据

    简单的总结一下编码bytes数据是为了方便传输与存储,而Unicode数据方便了显示,python3比python2更加清晰化了字节与字符的界限,python3取消了python2中的不同类型字符串的拼接。

    因为编码方式的不同经常会出现下面这种情况。

    在python中写一个小程序,

#coding=utf8
print(‘杰夫‘)

  在windows终端打开此文件。

技术分享

这里显示出一堆乱码,这是为什么呢?

因为我的python3默认编码方式是utf-8,而我的windows终端默认解码方式是GBK,lianxi1.py这个文件内容在内存中以utf-8的编码方式写入硬盘,在cmd中执行时,cmd软件默认解码方式是GBK,用GBK的方式去解码utf-8的二进制数据,解码出来的就是一堆乱码,所以解决方法就是要么让cmd使用utf-8的方式来解码,否则就只能让python解释器用GBK方式将文件内容编码存入硬盘。

#coding=GBK
print(杰夫)

技术分享

 

python与编码

标签:结果   占用   ima   字母   文字   用两个   alt   使用   二进制   

原文地址:http://www.cnblogs.com/Jeffding/p/7102262.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!