day3-字符转编码操作

背景

计算机只认识0和1,而后人们为了表示更多的字母,所以才产生字符编码,为了处理汉字,程序员设计了用于简体中文的GB2312和用于繁体中文的BIG5。从ASCII、GB2312、GBK到GB18030,这些编码方法都是向下兼容的。显然ASCII码无法将世界上的各种文字和符号全部表示,所以就需要新出一种可以代表所有字符的编码,即Unicode

三种编码格式

ASCII编码:255,最少占1个字节(只能存英文或特殊字符,不能存中文)

Unicode字符集:最少占2个字节(无论英文还是中文)
UTF-8编码:可变长字符编码,英文,占1个字节;中文,占3个字节

Python 2 和python 3 区别?

在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符集。使用的语法是在字符串前面加上前缀 u

在Python3中,所有的字符串都是Unicode字符串。

Python2.x和Python3.x中的编解码

1. 在Python2.x中,有两种字符串类型:str和unicode类型。

说明:str存bytes数据,unicode类型存unicode数据

 

 

 

 

 

 

2. 在Python3.x中,也只有两种字符串类型:str和bytes类型。

说明:str类型存unicode数据,bytes类型存bytes数据

 

文件从磁盘到文件的编码

当我们在编辑文本的时候,字符在内存对应的是unicode编码的,这是因为unicode覆盖范围最广,几乎所有字符都可以显示。但是,当我们将文本等保存在磁盘时,数据是怎么变化的?

答案是通过某种编码方式编码的bytes字节串。比如utf-8,一种可变长编码,很好的节省了空间;当然还有历史产物的gbk编码等等。于是,在我们的文本编辑器软件都有默认的保存文件的编码方式,比如utf-8,比如gbk。当我们点击保存的时候,这些编辑软件已经"默默地"帮我们做了编码工作。

那当我们再打开这个文件时,软件又默默地给我们做了解码的工作,将数据再解码成unicode,然后就可以呈现明文给用户了!所以,unicode是离用户更近的数据,bytes是离计算机更近的数据。

其实,python解释器也类似于一个文本编辑器,它也有自己默认的编码方式。python2.x默认ASCII码,python3.x默认的utf-8,可以通过如下方式查询:

import sys
print(sys.getdefaultencoding())  #获取默认编码

如果我们不想使用默认的解释器编码,就得需要用户在文件开头声明了。还记得我们经常在python2.x中的声明吗?

#-*- coding:utf-8 -*-

如果python2解释器去执行一个utf-8编码的文件,就会以默认的ASCII去解码utf-8,一旦程序中有中文,自然就解码错误了,所以我们在文件开头位置声明 #-*- coding:utf-8 -*-,其实就是告诉解释器,你不要以默认的编码方式去解码这个文件,而是以utf-8来解码。而python3的解释器因为默认utf-8编码,所以就方便很多了。

 

posted @ 2017-07-31 22:07  Mr.hu  阅读(101)  评论(0)    收藏  举报