编码 解码 python
之前一直对python文件中编码解码糊里糊涂,今天看到一篇文章,觉得把我讲的有点明白了。写个心得吧。
1、编码解码是怎么一回事?
Python 里面的编码和解码也就是 unicode 和 str 这两种形式的相互转化。
编码是 unicode -> str,相反的,解码就是 str -> unicode。
str形式,也就是字符串形式都是以一定的编码格式存在的,常见的编码格式有utf-8、ASCII、gb2312等等。
str1.decode(‘gb2312’),表示将gb2312编码的字符串str1解码成unicode。
str2.encode(‘utf-8’),表示将unicode字符串str2转换成用utf-8格式编码的字符串。
不同编码格式的字符串之间相互转换编码格式的话,都要先解码成unicode,再编码成其他编码格式的字符串。就拿上面的str1来说,将str1转成utf-8编码的字符串,需要这么做:
str1.decode(‘gb2312’).encode(‘utf-8’)。
2、如何在python文件中指定编码、解码格式呢
我们在编写python脚本的时候,通常在#! /usr/bin/env python下面一行指定该py文件的默认编码格式。比如# coding=utf-8,表示该py文件中的字符串都是以utf-8格式编码的。
而sys.defaultencoding则指明了默认的字符串解码方式。在解码时没有明确指明解码方式的时候使用。
还要记住一点,字符串用什么格式编码,就要用相同的格式解码才能变成unicode。
3、编码解码格式要一致
! /usr/bin/env python
-- coding: utf-8 --
s = '中文' # 这里的 s 是utf-8编码的字符串类型
s.encode('gb18030') 1234
观察上面的代码,我们预计会报错误。因为第二行指定了该py文件里面的字符串默认编码格式是utf-8的,所以s这个字符串就是utf-8编码的字符串。当以gb18030编码格式对s进行解码的时候,将会出错,因为“字符串”
第4句代码将 s 重新编码为 gb18030 的格式,即进行 unicode -> str 的转换。因为s本身就是 str 类型的,因此 Python 会自动的先将 s 解码为 unicode,然后再编码成 gb18030。
而当对s进行解码的时候,我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。很多情况下 sys.defaultencoding 是ANSCII,如果 s 不是这个类型就会出错。而我们拿上面的情况来说,我的 sys.defaultencoding 是 anscii,而 s 的编码方式是 utf8 的(因为该py文件的第二行指明了utf-8编码),所以出错了:
UnicodeDecodeError: ‘ascii’ codec can’t decode byte 0xe4 in position
0: ordinal not in range(128)
对于这种情况,我们有两种方法来改正错误:
一是明确的指示出 s 的解码方式
! /usr/bin/env python
-- coding: utf-8 --
s = '中文'
s.decode('utf-8').encode('gb18030') 1234
二是更改 sys.defaultencoding 为文件的编码方式
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
str = '中文'
str.encode('gb18030')12345678910
这里在调用sys.setdefaultencoding(‘utf-8’) 设置默认的解码方式之前,执行了reload(sys),这是必须的,因为python在加载完sys之后,会删除 sys.setdefaultencoding 这个方法,我们需要重新载入sys,才能调用 sys.setdefaultencoding 这个方法。
本文来自 liuchunming033 博客 ,全文地址请点击:https://blog.csdn.net/liuchunming033/article/details/52223612?utm_source=copy
编码 解码 python的更多相关文章
- python 对任意文件(jpg,png,mp3,mp4)base64的编码解码
程序是事件驱动的,写博客是什么驱动的?事件? 时间?no,我承认我很懒,甚至不愿意记录总结.哪是什么驱动的? 对! 问题驱动的.遇到了问题解决了问题突然想起来搬到blog上,让遇到相同问题的可以参考下 ...
- python摸爬滚打之day06----小数据池、编码解码
1.小数据池 代码块: 一个模块, 一个函数, 一个类, 甚至每一个command命令都是一个代码块. 一个文件也是一个代码块.而不需要创建一个新的数据. 这样会节省更多的内存区域. 在cmd命令行 ...
- python基础3之文件操作、字符编码解码、函数介绍
内容概要: 一.文件操作 二.字符编码解码 三.函数介绍 一.文件操作 文件操作流程: 打开文件,得到文件句柄并赋值给一个变量 通过句柄对文件进行操作 关闭文件 基本操作: #/usr/bin/env ...
- 【10】Python urllib、编码解码、requests、多线程、多进程、unittest初探、__file__、jsonpath
1 urllib urllib是一个标准模块,直接import就可以使用 1.1get请求 from urllib.request import urlopen url='http://www.nnz ...
- Python学习之==>URL编码解码&if __name__ == '__main__'
一.URL编码解码 url的编码解码需要用到标准模块urllib中的parse方法 from urllib import parse url = 'http://www.baidu.com?query ...
- 理解netty对protocol buffers的编码解码
一,netty+protocol buffers简要说明 Netty是业界最流行的NIO框架之一优点:1)API使用简单,开发门槛低:2)功能强大,预置了多种编解码功能,支持多种主流协议:3)定制能力 ...
- day2_python的数据类型,sys,os模块,编码解码,列表,字典
今天主要了解了python的数据类型,sys,os模块,编码解码,列表,字典 1.数据类型:int(python3没有长整型)文本总是Unicode,str表示二进制用byte类表示布尔型:True( ...
- Py3编码解码
Py3编码解码 写的不好请谅解,有问题欢迎指出. python2.x中的解决方案(图片来源于网络) #!/usr/bin/env python # -*- coding: utf-8 -*- ...
- 编码&解码
编码与解码首先,明确一点,计算机中存储的信息都是二进制的 编码/解码本质上是一种映射(对应关系):比如‘a’用ascii编码则是65,计算机中存储的就是00110101,但是显示的时候不能显示0011 ...
随机推荐
- Spring 读取配置文件的俩种方式
读取配置可通过 org.springframework.core.env.Environment 类来获取, 也可以通过@Value的方式来获取 注解形式: @PropertySource({&quo ...
- BM求递推式模板
时间复杂度\(O(N^2)\),原理不明...... #include <cstdio> #include <cstring> #include <cmath> # ...
- VS中生成、清理项目、调试、開始运行(不调试)、Debug 和 Release等之间的差别
版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/helloUSB2010/article/details/35802437 一.生成和又一次生成 &q ...
- [USACO08NOV]Cheering up the Cow
嘟嘟嘟 这道题删完边后是一棵树,那么一定和最小生成树有关啦. 考虑最后的生成树,无论从哪一个点出发,每一条边都会访问两次,而且在看一看样例,会发现走第w条边(u, v)的代价是L[w] * 2 + c ...
- C语言程序设计I—第八周教学
第八周教学总结(21/10-27/10) 教学内容 第三章 分支结构 3.1 简单的猜数游戏 3.2 四则运算 课前准备 在蓝墨云班课发布资源:chap03_分支结构.pptx PTA:2018秋第八 ...
- L2-014. 列车调度
L2-014. 列车调度 时间限制 300 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 火车站的列车调度铁轨的结构如下图所示. Figure ...
- ORP计
ORP计 ORP计通过测量铂或金电极与参比电极之间的电位差,转换成氧化还原电位信号.氧化还原电位测量用电极可与转换放大器组合,转换放大器部分与pH测量用相同.ORP计可用于排水处理(氰基处理.铬酸处理 ...
- 【nodeJs】nodejs
node.js
- Robosup3D平台搭建
目录 1.安装simspark及默认播放器 安装依赖库/下载simspark源码 编译并安装simspark 编译并安装rcssmonitor3d播放器 2.安装Roboviz播放器 安装java 安 ...
- JQuery中的事件委托
JQuery 中的事件委托 定义 事件委托就是利用冒泡的原理,把事件加到父级上,通过判断事件来源的子集,执行相应的操作,事件委托首先可以极大减少事件绑定次数,提高性能:其次可以让新元素的子元素也可以拥 ...