注:本人用Python3.4作为学习版本,以下学习心得只适用于Python3.4。

之前拜读了金角大王Alex关于编码的解答,收获颇多。特此致谢,以下仅谈一谈作为一个初学者,对编码的理解。

我所了解的编码,大致分为两类:第一类是支持中文的编码集;第二类是支持英文的编码集。至于别国的编码集,暂且不做讨论。

常见编码:ASCII;Unicode;UTF-8;big5,;GB2312;GBK;GB18030

  接下来,我对以上编码进行分类:

  只支持英文和特殊字符的编码:ASCII

    ASCII是基于拉丁字母的一套电脑编码系统,主要用于显示现代英语和其他西欧语言,用8位来表示1个字节,也就是表示一个英文需要8位二进制数。

  只支持中文和特殊字符的编码:big5,;GB2312;GBK;GB18030

    big5是用来存储繁体中文的编码集,而GB2312;GBK;GB18030都是用来存储简体中文的编码集

    GB2312;GBK;GB18030所支持的汉字数量依次递增,都采用2个字节来表示一个汉字或者特殊符号,也就是用这三个编码集表示中文字符,需要16位二进制数。

    其中需要说明的是,目前中文版windows编码集采用GBK 

  支持中文,英文和特殊字符的编码:Unicode;UTF-8

    Unicode既可以编码中文,也可以编码英文。采用2个字节来表示,也就是说表示一个字符需要16位二进制数。

    UTF-8可以简单理解为Unicode的升级版。当表示英文时,用1个字节来表示,表示一个字符需要8位二进制数;当表示中文时,用3个字节来表示,表示一个字符需要24位二进制数。

简单了解常用编码集后,我们在Python3.4中可以实现各编码集之间的转换,其中需要说明的是Python3.4默认使用UTF-8编码集(为什么看网上资料说是Unicode???)。

以下是验证程序:  

# Author: Lucas
import sys
print(sys.getdefaultencoding())

程序运行结果:

utf-8Process finished with exit code 0

当在Python中进行编码转换时,当字符编码不是Unicode时,我们都需要将字符先通过decode解码为Unicode,然后再进行encode编码,得到所期望的编码。

需要注意的是,decode时,我们需要告诉计算机,我们要把何种编码转换为Unicode。例如,你想要将UTF-8的编码转换为Unicode,写法如下:

decode(“UTF-8”)

接下来我们进行编码转化验证:

# Author: Lucas
#将test转换为gbk编码
import sys
print(sys.getdefaultencoding())
s="你"
s_to_unicode=s.decode("utf-8")

这就尴尬了,程序报错:

    s_to_unicode=s.decode("utf-8")
AttributeError: 'str' object has no attribute 'decode'
utf-8

由此猜想,网上说的Python默认编码应该指的是当Python解释器来运行程序时,采用Unicode编码运行,而程序保存格式应该为UTF-8。

接下来按照假设将test编码转为gbk:

# Author: Lucas
#将test转换为gbk编码
import sys
print(sys.getdefaultencoding())
test="你"
test_to_gbk=test.encode("gbk")
print(test_to_gbk)

运行结果如下:

utf-8
b'\xc4\xe3'Process finished with exit code 0

可以看出,Python3在运行程序时,默认编码格式确实是Unicode,我们成功将test转换成gbk编码,可以看出test在gbk编码中占用2个字节,16位二进制数,分别是c4,e3

接下来我们将test转成utf-8,这就需要经历解码和编码的过程。程序如下:

# Author: Lucas
#将test转换为gbk编码
import sys
print(sys.getdefaultencoding())
test="你"
test_to_gbk=test.encode("gbk")
print(test_to_gbk)
test_to_gbk_utf8 =test_to_gbk.decode("gbk").encode("utf-8")
print(test_to_gbk_utf8)

程序运行如下:

utf-8
b'\xc4\xe3'
b'\xe4\xbd\xa0'Process finished with exit code 0

可以看出成功将test转成了utf-8编码,其中test占用3个字节,24位二进制数,分别为e4,bd,a0。

至此,我们基本熟悉了Python环境下的编码转化规则,其余编码操作流程都是一样的。

总结:

  当进行编码转换时,我们需要知道当前版本python解释器在运行程序时默认的编码格式。在此基础上,当我们进行编码转换时,牢记:Unicode编码是中间编码,其他编码之间相互转换时,需要先将其解码(decode)为Unicode,然后再编码(encode)成对应编码。Unicode时刻放在心中,我们在编码转换时就会游刃有余。

  

  

转载于:https://www.cnblogs.com/lucas0625/p/7569822.html

浅谈Python中的编码规则相关推荐

  1. python安全编码问题_浅谈Python中的编码问题

    对于Python的初学者来说,编码问题相当令人头疼.本文就根据我在学习过程中遇到的问题简单谈一下Python中的编码.首先简单介绍一下几种常见的编码. 一.几种常见的字符编码 ASCII码 ASCII ...

  2. python命名规则数字开头的成语_浅谈Python中带_的变量或函数命名

    搜索热词 Python 的代码风格由 PEP 8 描述.这个文档描述了 Python 编程风格的方方面面.在遵守这个文档的条件下,不同程序员编写的 Python 代码可以保持最大程度的相似风格.这样就 ...

  3. python sys模块作用_浅谈Python中的模块

    模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Mod ...

  4. python的re2和re区别_浅谈Python中re.match()和re.search()的使用及区别

    1.re.match()fvk免费资源网 re.match()的概念是从头匹配一个符合规则的字符串,从起始位置开始匹配,匹配成功返回一个对象,未匹配成功返回None.fvk免费资源网 包含的参数如下: ...

  5. python中怎么调用函数_浅谈Python中函数的定义及其调用方法

    一.函数的定义及其应用 所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用函数的使用包含两个步骤 1.定义函数–封装独立的功能 2.调用函数–享受封装的成果 函数的作用:在开发时 ...

  6. python读取json数据格式问题_浅谈Python中的异常和JSON读写数据的实现

    异常可以防止出现一些不友好的信息返回给用户,有助于提升程序的可用性,在java中通过try ... catch ... finally来处理异常,在Python中通过try ... except .. ...

  7. python函数定义及调用-浅谈Python中函数的定义及其调用方法

    一.函数的定义及其应用 所谓函数,就是把具有独立功能的代码块组织成为一个小模块,在需要的时候调用函数的使用包含两个步骤 1.定义函数�C封装独立的功能 2.调用函数�C享受封装的成果 函数的作用:在开 ...

  8. python生成器和迭代器作用_浅谈Python中的生成器和迭代器

    迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...

  9. python中 是什么类型_浅谈python中的变量默认是什么类型

    浅谈python中的变量默认是什么类型 1.type(变量名),输出的结果就是变量的类型: 例如 >>> type(6) 2.在Python里面变量在声明时,不需要指定变量的类型,变 ...

最新文章

  1. html post 图片,如何发送图片作为多部分POST请求的一部分 - Java HtmlUnit
  2. 编程之美-构造数独(1)
  3. 【Web安全】内网渗透研究之利用MSF和Impacket工具拿域控
  4. 关于ORM中只有XML没有映射实体的思考?期待大家的建议
  5. 2021“MINIEYE杯”中国大学生算法设计超级联赛(8)(1002,1004,1006,1009)
  6. (计算机组成原理)第二章数据的表示和运算-第一节1:一文总结进制转换,妈妈再也不用担心我不会进制转换了
  7. evplayer2可以多设备登录吗_这么多自助设备,你都选对投放位置了吗
  8. @AuotoWired+@Qualifier(百度百科)
  9. 春节咋过?韩上班族平均休4天 计划花费2756元人民币
  10. 简单银行账户管理系统
  11. 阿里P9首次公开:阿里面试官都问些什么?
  12. 计算机怎么没有word文档,word没了怎么回事 为什么电脑没有了word
  13. 计算机应用线型类型为虚线方点,cad怎样把线变成虚线或者点划线
  14. 笔记本电脑wifi怎么连接
  15. 前端导出Excel表格
  16. 高情商的王维注解了低政商孟浩然的后半生
  17. Soloπ 工具使用见解
  18. 【echarts记录 -- 3d 饼状图实现】
  19. 2012年英语专升本英语阅读「Part II 阅读专区」【文章(图片)、答案、词汇记忆】
  20. 【JVM翻译系列】「官方技术翻译」《A FIRST LOOK INTO ZGC》初探JVM-ZGC垃圾回收器

热门文章

  1. 用 Go 构建一个区块链 -- Part 3: 持久化和命令行接口
  2. replugin源码解析之replugin-plugin-gradle(插件的gradle插件)
  3. 利用FRIDA攻击Android应用程序(一)
  4. Binder学习指南
  5. Ubuntu下使用WebStorm开发nodejs(一)
  6. JZOJ 3660. 【SHTSC2014】信号增幅仪
  7. SQLite自增关键字报错(near “AUTO_INCREMENT“: syntax error)
  8. python string模块安装_python String模块-阿里云开发者社区
  9. python post请求参数为list_浅谈python3发送post请求参数为空的情况
  10. java 全排列非递归算法_全排列的非递归算法 - osc_ivkc73ze的个人空间 - OSCHINA - 中文开源技术交流社区...