深入浅出地,彻彻底底地理解python中的编码

时间:2022-11-08 10:11:22

python处理文本的功能非常强大,但是如果是初学者,没有搞清楚python中的编码机制,也经常会遇到乱码或者decode error。本文的目的是简明扼要地说明python的编码机制,并给出一些建议。

问题1:问题在哪里?

问题是我们的靶子,心中没有问题去学习就会抓不住重点。
本文使用的编程环境是centos6.7,python2.7。我们在shell中键入python以打开python命令行,并键入如下两句话:

 s = "中国zg"
 e  = s.encode("utf-8")

深入浅出地,彻彻底底地理解python中的编码

现在的问题是:这段代码能运行吗?
答案是不能,会报如下的错:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0: ordinal not in range(128)

深入浅出地,彻彻底底地理解python中的编码

请留意一下错误中说明的0xe4,它是我们分析错误的突破口。

相信很多人都遇到过这个错误。那么新的问题来了。

问题2:Why?

要搞清楚原因,我们不妨认真分析下这两句话的执行流程:
首先,我们通过键盘在python命令行解释器中键入了 中国zg 并且给它加上了英文的双引号,然后又赋值给了变量s,看起来很稀松平常是不是?其实里面大有玄机。

当我们通过键盘在程序中输入字符时,我们是通过操作系统完成这个功能的。我们在屏幕上看到的 中国zg 实际上是操作系统给我们人类的一个反馈,告诉你:“嗨,哥们,你在程序中输入了字符 中国zg ”

那操作系统给程序的反馈是什么呢?答案就是01串,这个01串是什么样子,又是怎么生成的呢?
答案就是操作系统使用自己的默认编码方式,将中国zg进行了编码,并把编码后的01串给了程序。

我们用的centos系统默认的编码是utf-8,所以,只要知道中国zg每个字符的utf-8的编码就可以知道01串是什么了。

查询后,可以获得它们的编码是(以16进制和2进制表示):

| 中 |国 | z |g|
|: ------------- |:-------------:| -----														
		

深入浅出地,彻彻底底地理解python中的编码的更多相关文章

  1. 【转】你真的理解Python中MRO算法吗?

    你真的理解Python中MRO算法吗? MRO(Method Resolution Order):方法解析顺序. Python语言包含了很多优秀的特性,其中多重继承就是其中之一,但是多重继承会引发很多 ...

  2. 理解 Python 中的可变参数 *args 和 **kwargs:

    默认参数:  Python是支持可变参数的,最简单的方法莫过于使用默认参数,例如: def getSum(x,y=5): print "x:", x print "y:& ...

  3. [转]深刻理解Python中的元类(metaclass)以及元类实现单例模式

    使用元类 深刻理解Python中的元类(metaclass)以及元类实现单例模式 在看一些框架源代码的过程中碰到很多元类的实例,看起来很吃力很晦涩:在看python cookbook中关于元类创建单例 ...

  4. 深入理解Python中的yield和send

    send方法和next方法唯一的区别是在执行send方法会首先把上一次挂起的yield语句的返回值通过参数设定,从而实现与生成器方法的交互. 但是需要注意,在一个生成器对象没有执行next方法之前,由 ...

  5. 如何理解python中的if __name__=='main'的作用

    一. 一个浅显易懂的比喻 我们在学习python编程时,不可避免的会遇到if __name__=='main'这样的语句,它到底有什么作用呢? <如何简单地理解Python中的if __name ...

  6. 深入理解Python中的GIL(全局解释器锁&rpar;

    深入理解Python中的GIL(全局解释器锁) Python是门古老的语言,要想了解这门语言的多线程和多进程以及协程,以及明白什么时候应该用多线程,什么时候应该使用多进程或协程,我们不得不谈到的一个东 ...

  7. 深入理解python中函数传递参数是值传递还是引用传递

    深入理解python中函数传递参数是值传递还是引用传递 目前网络上大部分博客的结论都是这样的: Python不允许程序员选择采用传值还是传 引用.Python参数传递采用的肯定是"传对象引用 ...

  8. 全面理解python中self的用法

    self代表类的实例,而非类. class Test: def prt(self): print(self) print(self.__class__) t = Test() t.prt() 执行结果 ...

  9. 一篇文章助你理解Python3中字符串编码问题

    前几天给大家介绍了unicode编码和utf-8编码的理论知识,以及Python2中字符串编码问题,没来得及上车的小伙伴们可以戳这篇文章:浅谈unicode编码和utf-8编码的关系和一篇文章助你理解 ...

随机推荐

  1. VS2013全攻略

    http://blog.csdn.net/cpp12341234/article/details/45371269 挺好的,喜欢

  2. C语言两种查找方式(分块查找,二分法)

    二分法(必须要保证数据是有序排列的):   分块查找(数据有如下特点:块间有序,块内无序):    

  3. self&comma;parent&comma;this区别

    我容易混淆public,private,protected,还容易混淆this,self这些东西.前面已经写了一篇关于public,private,protected博文了,下面来说一下this,se ...

  4. tomcat不用工程名访问怎么配置?

    tomcat不用工程名访问配置,直接用域名访问 在 tomcat6的安装路径下,D:\Tomcat-6\conf,修改server.xml文件 编辑Host节点, <Host appBase=& ...

  5. Git上传项目到GitHub

    1.注册账户 https://github.com/ 2.创建仓库 3.需要安装 Git   http://msysgit.github.com/ 4.本地创建ssh key(不是必要,不创建ssh可 ...

  6. 概率dp总结 正在更新

    借bin神一句话 概率DP主要用于求解期望.概率等题目. 转移方程有时候比较灵活. 一般求概率是正推,求期望是逆推.通过题目可以体会到这点. 先推公式 多个 -> 一个 明确dp[i]代表什么意 ...

  7. 日期控件:My97DatePicker

    My97DatePicker是一款非常灵活好用的日期控件.使用非常简单. 1.下载My97DatePicker组件包 下载地址:http://download.csdn.net/detail/emov ...

  8. PHP——分页显示的完善(加查询,用类简化sql语句)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. C&num;显示接口实现和隐式接口实现

    在项目中可能会遇到显示接口实现和隐式接口实现.什么意思呢?简单来说使用接口名作为方法名的前缀,这称为“显式接口实现”:传统的实现方式,称为“隐式接口实现”.隐式接口实现如下: interface IS ...

  10. 微信小程序 事件绑定 bind和catch 区别

    转自:https://blog.csdn.net/xiaoqiang_0719/article/details/79729592 本文以冒泡事件tap(手指触摸后马上离开,也就是点击事件)为例子来区别 ...