004-python基础-字符编码与转码

一、三种编码方式

  1. ASCII:是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,其最多只能用 8 位来表示(一个字节),即:2**8 = 256-1,所以,ASCII码最多只能表示 255 个符号。
  2. Unicode(统一码、万国码、单一码):是一种在计算机上使用的字符编码,规定所有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536。
  3. UTF-8: 是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类:ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存。utf8,因为是可变长字节的编码方式,所以存储文件时就会节省大量空间,同时兼容ASCII码。

  详细文章:

  http://www.cnblogs.com/yuanchenqi/articles/5956943.html (py编码终极版)

      一言以蔽之:Unicode是内存编码表示方案(是规范),而UTF是如何保存和传输Unicode的方案(是实现)这也是UTF与Unicode的区别。

  在。

二、文件从磁盘到内存的编码

  那当我们保存了存到磁盘上的数据又是什么呢?

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

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

  所以,unicode是离用户更近的数据,bytes是离计算机更近的数据。

  说了这么多,和我们程序执行有什么关系呢?

  先明确一个概念:py解释器本身就是一个软件,一个类似于文本编辑器一样的软件!

  现在让我们一起还原一个py文件从创建到执行的编码过程:

  打开pycharm,创建hello.py文件,写入

ret=1+1
s=‘苑昊‘
print(s)

当我们保存的的时候,hello.py文件就以pycharm默认的编码方式保存到了磁盘;关闭文件后再打开,pycharm就再以默认的编码方式对该文件打开后读到的内容进行解码,转成unicode到内存我们就看到了我们的明文;

而如果我们点击运行按钮或者在命令行运行该文件时,py解释器这个软件就会被调用,打开文件,然后解码存在磁盘上的bytes数据成unicode数据,这个过程和编辑器是一样的,不同的是解释器会再将这些unicode数据翻译成C代码再转成二进制的数据流,最后通过控制操作系统调用cpu来执行这些二进制数据,整个过程才算结束。

  那么问题来了,我们的文本编辑器有自己默认的编码解码方式,我们的解释器有吗?

  当然有啦,py2默认ASCII码,py3默认的utf8,可以通过如下方式查询

1 import sys
2 print(sys.getdefaultencoding())

  大家还记得这个声明吗?

1 #coding:utf8

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

二、转码

  需知:

  1.在python2默认编码是ASCII, python3里默认是utf-8

  2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-8就是unicode

  3.在py3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string

  

 1 #-*-coding:utf-8-*-
 2 __author__ = ‘Alex Li‘
 3
 4 import sys
 5 print(sys.getdefaultencoding())
 6
 7
 8 msg = "我爱北京天安门"
 9 msg_gb2312 = msg.decode("utf-8").encode("gb2312")
10 gb2312_to_gbk = msg_gb2312.decode("gbk").encode("gbk")
11
12 print(msg)
13 print(msg_gb2312)
14 print(gb2312_to_gbk)

in python2

 1 #-*-coding:gb2312 -*-   #这个也可以去掉
 2 __author__ = ‘Alex Li‘
 3
 4 import sys
 5 print(sys.getdefaultencoding())
 6
 7
 8 msg = "我爱北京天安门"
 9 #msg_gb2312 = msg.decode("utf-8").encode("gb2312")
10 msg_gb2312 = msg.encode("gb2312") #默认就是unicode,不用再decode,喜大普奔
11 gb2312_to_unicode = msg_gb2312.decode("gb2312")
12 gb2312_to_utf8 = msg_gb2312.decode("gb2312").encode("utf-8")
13
14 print(msg)
15 print(msg_gb2312)
16 print(gb2312_to_unicode)
17 print(gb2312_to_utf8)

in python3

时间: 2024-10-04 17:40:35

004-python基础-字符编码与转码的相关文章

Python全栈开发之Python基础-字符编码与转码

详细文章: http://www.cnblogs.com/yuanchenqi/articles/5956943.html http://www.diveintopython3.net/strings.html 需知: 1.在python2默认编码是ASCII, python3里默认是utf-8 2.unicode 分为 utf-32(占4个字节),utf-16(占两个字节),utf-8(占1-4个字节), so utf-8就是unicode 3.在py3中encode,在转码的同时还会把str

Python基础(字符编码与文件处理)

一.了解字符编码的知识储备 1.计算机基础知识(三副图) 2.文本编辑器存取文件的原理(notepad++,Pycharm,word) 打开编辑器就启动了一个进程,是在内存中运行的,所以在编辑器写的内容在没保存之前都是存放在内存中的,断电后数据就会丢失.因而需要保存到硬盘上,点击保存按钮,就从内存中把数据刷到硬盘上. 3.Python解释器执行py文件的与原理,例如python test.py 第一阶段:python解释器启动,此时就相当于启动了一个文本编辑器. 第二阶段:python解释器相当

Python自动化开发课堂笔记【Day03】 - Python基础(字符编码使用,文件处理,函数)

字符编码使用 1. 文本编辑器如何存取文件 文本编辑器相当一个运行在内存中的进程,所以文件内容在编辑未存储时都是在内存中的,尚未存储在硬盘之中,在没有保存之前,所编辑的任何文本都只是一堆字符,没有任何逻辑上的意义,当存储文件的时候需要以一定的编码格式存储于硬盘之中,当进行文件读取的时候也需要以同样的编码格式进行读取到内存之中进行操作,如果存储文件的编码和读取文件的编码不一致则会引起读取过程中的乱码导致文件操作失败. P.S. --> Python解释器执行py文件的原理. Step1. Pyth

Python基础-字符编码

字符编码 Python 解释器在加载.py文件中的代码,会对内容进行编码(默认asciII) ASCII(American Standard Code for Information Interchange,美国标准信息交换代码)是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其它西欧语言,其最多只能用8位来表示(一个字节),即:2^8=256-1,所以,ASCII码最多只能表示255个符号. ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符 ASCII值 控制字符

python基础 字符编码转换

python2 1 #python2上所有的字符编码都需要先decode到unicode,再从unicode encode到目标编码 2 str_utf8 = "我就是我" 3 print("str_utf-8:我就是我:",str_utf8) 4 #将utf-8转换为unicode 5 str_utf8_to_unicode = str_utf8.decode("utf-8") 6 print(str_utf8_to_unicode) 7 #将

Python——day3_基础1_集合,文件操作,字符编码与转码

集合 集合是一个无序的,不重复的数据组合,它的主要作用如下: 去重,把一个列表变成集合,就自动去重了 关系测试,测试两组数据之前的交集.差集.并集等关系 常用操作 s = set([3,5,9,10]) #创建一个数值集合 t = set("Hello") #创建一个唯一字符的集合 a = t | s # t 和 s的并集 b = t & s # t 和 s的交集 c = t – s # 求差集(项在t中,但不在s中) d = t ^ s # 对称差集(项在t或s中,但不会同时

Python基础3 文件操作、字符编码与转码

文件操作 对文件操作过程 打开文件,得到文件句柄赋值给变量 操作 关闭文件 打开文件的模式有: r,只读模式(默认). w,只写模式.[不可读:不存在则创建:存在则删除内容:] a,追加模式.[可读:   不存在则创建:存在则只追加内容:] "+" 表示可以同时读写某个文件 r+,可读写文件.[可读:可写:可追加] w+,写读 a+,同a "U"表示在读取时,可以将 \r \n \r\n自动转换成 \n (与 r 或 r+ 模式同使用) rU r+U "b

python学习笔记(集合的使用、文件操作、字符编码与转码、函数)

集合 集合(set):把不同的元素组成一起形成集合,是python基本的数据类型. 集合元素(set elements):组成集合的成员 为什么需要集合? 集合的作用 1 .列表去重复数据 按照现有知识的解决思路:先设置空列表,然后使用for寻获,把需要去重的列表的第一个数据放到新列表中,然后依次取出第二个数据,把第二个数据和第一个数据作比较,如果不一样,则存入新列表中:以此类推,每取一次都要和新列表中的数据作对比,不一样的则添加入新列表中. 2. 关系测试 比如有学员同时报了python班和l

python字符编码与转码

python 2.x 字符编码与转码 打印系统默认编码格式 import sys print(sys.getdefaultencoding()) UTF-8 转 gbk 方式:utf-8--转成--unicode--转成--gbk a = "你好" print a utf8_to_unicode = a.decode("utf-8")                 #utf-8转unicode print utf8_to_unicode unicode_to_gb