看过很多关于Python字符编码的博客,或深或浅,总感觉有点云里雾里,今天这里我尝试用我的方式也来凑个热闹。

首先,我们要弄清楚几个问题,这个对我们后面的理解非常重要。

字节与字符

Python源代码文件的执行过程

Python中的字符串与unicode字符串的区别

字节与字符

这是针对两个不同的对象创立出来的,人与字符, 机器与字节

字节

是比较底层的概念,就是计算机里的0和1的组合,8个为一个字节。

字符

这个是经过抽象后的,说白点,就是我们看见的一个一个的符号(比如汉字,标点,字母等等),是给人理解的。因为我们平时交流用的记号都是字符,而计算机存储,计算需要的是0和1的字节数据,这就存在一个映射关系,就是字符与字节的映射关系。

所以,就形成了人看字符,机器看字节。而字节 与 字符的转换就称为解码与编码,这个过程就需要指定转换规则,这个规则就是编码规则,比如utf8,ascii,gbk。

Python源代码文件的执行过程

我们知道,磁盘上的文件都是二进制格式存放的,其中文本文件都是以某种特定编码的字节形式存放。对于源文件的编码是文本编辑器指定。当执行Python代码文件时,解释器字节后,需要将其转换为Unicode字符串(decode过程)之后才能操作。因此,对于文本编辑器编辑的一个Python源文件,当再次被读取执行之前的解码过程,就需要知道当初的编码原则,而这个解码过程就有个坑。

Python2的默认解码ASCII,不能识别中文字符,这个当初utf8编码成字节文件就不能被解释器正确解码。而Python3默认的是utf8

因此,常见python2中,在源码文件头写上这个一个注释,_*_ coding:utf-8 _*_,来告知解释器文件编码,让其改变其默认解码规则。

# python2

import sys

sys.getdefaultencoding()

# 'ascii'

# Python3

import sys

sys.getdefaultencoding()

# 'utf-8'

过程

我们常见的解码错误(UnicodeEncodeError)就出现在解释器的解码环节。

Python中字符串与unicode字符串的区别

Python2

Python2中对字符串的支持提供以下三个类:

class basestring(object)

class str(basestring)

class unicode(basestring)

这里面,可以这么理解,str就是字节流形式的字节串,unicode就是字符,str当转换为unicode的时候,就是字节-->字符的过程,就需要编码,解码过程。

str用这个字符串的名字,这就跟我们平时理解的字符串不一致,其实是字节串和存在磁盘的字节一样一样的。

Python3

Python3提供的二个类:

class bytes(object)

class str(object)

Python3避免了这种概念上的混淆,把字节用bytes来表示,字符串用str来表示(而Python2用str来表示字节,unicode来表示字符),这就和我们上面认识的字节,字符的概念一致。

参考

打开App,阅读手记

python3默认的字符编码和文件编码_Python的字符编码之三个问题相关推荐

  1. Matlab | MATLAB编辑器:无法使用GBK编码保存文件,请改用UTF-8编码保存文件(问题解决)

    ================================================ 博主github:https://github.com/MichaelBeechan 博主CSDN:h ...

  2. python3字符编码与文件处理终极版

    python3字符编码与文件处理 1. 什么是编码 ASCII GB2312 GBK 和 GB18030 UNICODE utf8 Unicode与utf8的关系 拓展:utf8是如何节约硬盘和流量的 ...

  3. Python02-数据类型、字符编码、文件处理

    一 引子 二 数字 三 字符串 四 列表 五 元组 六 字典 七 集合 八 数据类型总结 九 字符编码 十 作业 一 引子 1 什么是数据? x=10,10是我们要存储的数据 2 为何数据要分不同的类 ...

  4. 字符编码与文件的基本操作

    字符编码与文件的基本操作 1 > 字符编码的实际应用 1.1 > 编码与解码含义 1.2 > 编码(encode) 1.3 > 解码(decode) 1.4 > 如何解决 ...

  5. 哈夫曼编码解压缩文件 - Java实现

    文章目录 前言 一.文件压缩 二.文件解压 结语 前言 不了解哈夫曼树的可以移步查看我的另一篇博客:哈夫曼树(最优二叉树) 使用哈夫曼编码压缩文件,其实就是将每个字符的哈夫曼编码得到,每8位转为一个字 ...

  6. python3默认的代码编码是什么-Python3 到底什么是字符编码

    我之前老是有这种感觉, 就是明明已经看过很多关于字符编码的资料了, 感觉字符编码相关的知识点不难理解, 觉得自己已经把字符编码给弄懂了, 但当别人问我到底什么是字符编码, Unicode是什么啊, U ...

  7. python3默认字符编码_python3-字符编码

    tips: 一直被字符编发困扰,研究了一下,搞清楚了几个概念,也明白了之前的一些疑问,现在做个简单记录,可做参考,不适合系统学习字符编码. ascii:占一个字节,英文字母及数字 Unicode:两个 ...

  8. python为源文件指定系统默认字符编码是_系统编码、文件编码与python系统编码

    在linux中获取系统编码结果: Windows系统的编码,代码页936表示GBK编码 可以看到linux系统默认使用UTF-8编码,windows默认使用GBK编码.Linux环境下,文件默认使用U ...

  9. Python自动化开发 - 字符编码、文件和集合

    本节内容 字符编码 文件操作 集合 一.字符编码 1.编码 计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.解决思路:数字与符号建立一对一映射,用不同数字表示不同符号. ASCI ...

最新文章

  1. 增强迪基-福勒检验(ADF检验、augmented Dickey-Fuller test)是什么?解决了什么问题?
  2. 数据中心进水了怎么办?数据中心如何防洪?
  3. html的input不可编辑状态,HTML中让表单input不可编辑的方法
  4. 实时获取vuex更新的新数据_京东手机销量实时数据更新 荣耀Play4T Pro位列第一
  5. 理解MYSQL MVCC 实现机制
  6. K-Complete Word CodeForces - 1332C(贪心)
  7. 关于压缩工具 7z(7-zip) 的选项 -u(更新压缩档案中的文件)的解读
  8. nrf52832芯片手册_nRF52832低功耗问题不完全总结
  9. 鬼子进村(洛谷 1503)
  10. JQuery中淡出和淡入动画效果
  11. 关于线程插入函数如何用的问题
  12. Linux上Oracle自动启停方案
  13. 92. php 命名空间(2)
  14. 判断二极管导通例题_朝花夕拾——2018全国1卷导数压轴题原题重现
  15. Mysql数据库开启远程连接
  16. 把FIL放在哪里最值钱
  17. 简述计算机五种常见动画及特点。【可拆成多个简答】
  18. 2018/8/16第二周
  19. 个税APP优化解决方案
  20. cad引出线段lisp_利用lisp给CAD直线取整?

热门文章

  1. linux fdisk 权限不够,Linux 文件系统结构、磁盘的管理
  2. golang 还是php web,golang适合做web开发吗?
  3. 树状数组入门(有被精简的树状数组所震撼到)
  4. 量子计算计算机简史pdf,量子计算及其潜在应用.pdf
  5. 管家婆辉煌版软件的使用方法_管家婆软件进销存的使用方法,管家婆软件使用教程_双全科技...
  6. Java 算法 面试
  7. (二)Netty之IO模型
  8. M6315模块连接阿里云物联网MQTT通讯
  9. python // 运算符
  10. ofdma技术_SC-FDMA技术