Python—编码与解码(encode()和decode())
编码与解码
- decode英文意思是解码,encode英文原意是编码。
- Python 里面的编码和解码也就是 unicode 和 str 这两种形式的相互转化。编码是 unicode -> str,解码是 str -> unicode。
- 字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码, 即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
- decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。
- encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。
一、# -*- coding: utf-8 -*-
关于Python文件开头的"编码指示",也就是 # -*- coding: -*- 这个语句。Python 默认脚本文件都是 UTF-8 编码的,当文件中有非 UTF-8 编码范围内的字符的时候就要使用"编码指示"来修正。
#! /usr/bin/env python
# -*- coding: utf-8 -*- str1 = "我是中国人"
print "str1==>", str1
二、sys.defaultencoding
关于 sys.defaultencoding,这个在解码没有明确指明解码方式的时候使用。
示例如下:注意这里的 str1 是 str 类型的,而不是 unicode。
#! /usr/bin/env python
# -*- coding: utf-8 -*- str1 = "我是中国人"
print "str1==>", str1
str2 = str1.encode('gb2312') # 程序执行到这一步会报错,解决方法有下面两种
str1.encode('gb2312') 这句代码将 str1 重新编码为 gb2312 的格式,即进行 unicode -> str 的转换。因为 str1 本身就是 str 类型的,因此 Python 会自动的先将 str1 解码为 unicode ,然后再编码成 gb2312。因为解码是python自动进行的,我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。很多情况下 sys.defaultencoding 是 ANSCII,如果 str1 不是这个类型就会出错。拿上面的情况来说,我的 sys.defaultencoding 是 anscii,而 str1 的编码方式和文件的编码方式一致,是 utf8 的,所以出错了。对于这种情况,我们有两种方法来改正错误。
#! /usr/bin/env python
# -*- coding: utf-8 -*- str1 = "我是中国人"
print "str1==>", str1
str2 = str1.decode('utf-8').encode('gb2312') # 方法1:手动解码再编码
#! /usr/bin/env python
# -*- coding: utf-8 -*- import sys
# Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入
if sys.version_info[0] == 3:
from importlib import reload
reload(sys) if sys.version_info[0] == 2:
reload(sys)
sys.setdefaultencoding('utf-8') str1 = "我是中国人"
print "str1==>", str1
str2 = str1.encode('gb2312') # 方法2:设置自动解码的方式,再编码,
https://blog.csdn.net/qq_41185868/article/details/79039604
https://blog.csdn.net/u012735708/article/details/79086628
Python—编码与解码(encode()和decode())的更多相关文章
- Python字符串的编码与解码(encode与decode)
首先要搞清楚,字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unico ...
- python编码问题之\"encode\"&\"decode\"
python encode decode 编码 decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换 ...
- 【python】浅谈encode和decode
对于encode和decode,笔者也是根据自己的理解,有不对的地方还请多多指点. 编码的理解: 1.编码:utf-8,utf-16,gbk,gb2312,gb18030等,编码为了便于理解,可以把它 ...
- Python编码与解码
# -*- coding: utf-8 -*- # 直接保存为Python脚本,对照执行结果会好看点. # 实验的内容都是在Python 2.7.x下进行的. # Python3默认采用unicode ...
- Python-2.7 : 编码问题及encode与decode
普通的字符串在py2.7中都是以ASCII编码的,例如str=“abc”,若含有中文则会以gbk或者gb2312编码(GB2312是中国规定的汉字编码,也可以说是简体中文的字符集编码;GBK 是 GB ...
- python 编码与解码 decode解码 encode 编码
>>> '无' #gbk字符'\xce\xde'>>> str1 = '\xce\xde'>>> str1.decode('gbk') # ...
- python编码和解码
一.什么是编码 编码是指信息从一种形式或格式转换为另一种形式或格式的过程. 在计算机中,编码,简而言之,就是将人能够读懂的信息(通常称为明文)转换为计算机能够读懂的信息.众所周知,计算机能够读懂的是高 ...
- python 编码和解码
- python基础小知识,is和==的区别,编码和解码
1.is和==的区别 1)id() 通过id()我们可以查看到一个变量表示的值在内存中的地址 >>> s1 = "Tanxu" >>> s2 = ...
随机推荐
- Android Service 启动流程
执行顺序 : startService -> bindService -> unbindService -> stopService 回调的结果为: 执行顺序 : startServ ...
- 别不信!servlet获取到的参数值,也许完全出乎你的意料!
先贴出来简单得不能再简单的demo页面效果: 如下是spring mvc的Controller: @RequestMapping("mytest") @Controller pub ...
- PHP代码篇(六)--如何根据邀请人id查询满足条件的会员上级
说,如果有一个会员表,每一个会员都有一个邀请人from_id字段(记录该会员是谁邀请的),知道一个会员id,现在需要查询某一个会员是否是该会员的下级. 表如下: 一.当下需求 1.我们需要知道会员id ...
- Linux系统学习 五、网络基础—网络通信协议
OSI/ISO七层模型和TCP/IP四层模型 网络层协议和IP划分 OSI的七层框架 物理层:设备之间的比特流的传输.物理接口.电气特性等. 数据链路层:成帧.用MAC地址访问媒介.错误检测与修正. ...
- [Linux]线程分离状态的理解
在任何一个时间点上,线程是可结合的(joinable),或者是分离的(detached).一个可结合的线程能够被其他线程收回其资源和杀死:在被其他线程回收之前,它的存储器资源(如栈)是不释放的.相反, ...
- Day5- Python基础5 模块导入、time、datetime、random、os、sys、hashlib、json&pickle
本节目录: 1.模块的分类 2.模块的导入 3.time模块 4.datetime模块 5.random 6.os模块 7.sys模块 8.hashlib 9.json&pickle 一.模块 ...
- hashlib和hmac模块
目录 一.hashlib模块 1.0.1 hash是什么 1.0.2 撞库破解hash算法加密 一.hashlib模块 1.0.1 hash是什么 hash是一种算法(Python3.版本里使用has ...
- 阿里Nacos-配置-多环境
多环境的配置隔离是配置中心最基础的一个功能之一.不同的环境配置的值不一样,比如数据库的信息,业务的配置等. Spring Boot 多环境配置 首先我们来回顾下在Spring Boot中用配置文件的方 ...
- COMP2521: Assignment
COMP2521: Assignment 2Social Network AnalysisA notice on the class web page will be posted after eac ...
- VSCode中代码在浏览器中打开及实时刷新
实时刷新方法一: 在项目目录下运行命令: browser-sync start --server --files "**/*.css,**/*.html,**/*.js" 实施刷新 ...