首页 > 技术文章 > Python编码

clay-whoami 2016-08-17 17:02 原文

编码基础:

      众所周知,计算机只可以存储和处理二进制数据,所以各种文字、字母、符号如果被计算机识别的话,中间需要有一道对应关系,于是便有了ASCII(美国标准信息交换代码),ASCII使用7位二进制数标记了128(2^7)个字符(符号、字母、控制符等),由于1字节=8位,所以最高位补个0,凑够8位以方便计算和处理。

      接着,拉丁语系的技术宅们发现,这128个字符的高位空着的,那么干脆用来表示拉丁语系的主要符号吧!还是使用单字节,但是可以表示的字符数量增加了一倍。这套编码叫做latin-1(iso-8859-1)

      这些宅男们没有想到,区区一个字节256个符号,对于东亚国家来讲,简直呵呵了。拿中文为例,仅常用字符就几千个,于是中国国家标准总局制定了一套中文编码——GB2312GB2312通过两个字节表示一个汉字,且最高位为0的部分兼容ASCII,最高位为1的部分则通过连续的两个字节表示一个中文字。后来又出现了兼容GB2312GBK编码。

      到这里,依然面临了一个问题:GB2312或者GBK编码中,仅可以表示汉字和英文字符,无法做到多语言文字同时表示。这时候,Unicode(又称万国码)出现了。Unicode采用32位二进制(4字节)表示一个字符,这样便可以一套编码对应多种不同语言。Unicode是一种编码,它的作用是指定字符到二进制数之间的对应关系。但是对于存储和传输,Unicode有几种不同的实现,比较常用的是UTF-8、UTF-16、UTF-32。UTF-32中,每个字符固定占4字节,按照Unicode编码完全映射。而UTF-8UTF-16则属于变长编码,分别使用最少1(UTF-8)2(UTF-16)字节到最多4个字节来编码。

Python源码中的编码:

      现在大部分的Python第三方库对于Python2.X版本是支持的,所以Python2.X是现在的主流解释器。Python2.X解释器默认将源码认作ASCII编码格式。如果不在首行显式指定编码,则无法在源码中出现非ASCII字符。常用的指定源码的编码格式:

 

# coding=<coding name>         #平常写代码使用
or
# _*_ coding:utf-8 _*_        #较为正式

 

 

    Python3.X解释器默认将源码认作UTF-8编码,所以使用此版本解释器时,不需要显式的指定编码,对于中文Print之后也是正常显示的。

Python中的编码:

       Python2.X中两个常用的表示字符串的类型:str、unicode;

       对于str类型,我们可以将它理解为一个存储二进制内容的容器。如果这类字符串,我们遍历其中每一个元素的时候,对于二进制编码的字符是正常显示的,而其他的则不会正常显示。

       对于Unicode类型,Python在存储和使用时默认是UTF-8编码。这类字符串在创建时,会在前面加上一个U来标记,我们对其进行遍历时,所有的字符都会正常显示。

       而对于这两种类型字符串可以进行相互转换,decode将str解析为Unicode;encode将Unicode解析为str。

       Python3.X中两个常用的表示字符串的类型:str、byte;

       str类型就如同Python2.X中的Unicode类型一样使用。同样这两种类型之间也是可以相互转换的,decode将byte解析为str;encode将str解析为byte。对于str类型遍历全部字符正常显示,下列代码可直接复制粘贴进行测试。

A = '宝宝的宝宝是不是宝宝的宝宝,如果宝宝的宝宝不是宝宝的宝宝,那可真是吓死宝宝了'
for a in A:
    print(a)
B = A.encode()
print(B)
C = B.decode()
print(C)

注意:关于Python2.X和3.X版本的不同在这里不予深究,但是在平常使用中注意以下几点说明:

1、3.X较2.X性能要慢一些,还存在较大的优化空间;

2、3.X默认是Unicode编码中的UTF-8变长编码,无需显式指定编码;

3、在语法上去除了<>,改用!=

     去除了Print语句,加入了Print()

     关键字加入了as和with,还有True、False、None

 友情技术博客链接:

https://zhuanlan.zhihu.com/p/20612337

 

http://www.cnblogs.com/codingmylife/archive/2010/06/06/1752807.html

 

推荐阅读