编码与解码

  • 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())的更多相关文章

  1. Python字符串的编码与解码(encode与decode)

    首先要搞清楚,字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unico ...

  2. python编码问题之\"encode\"&\"decode\"

    python encode decode 编码 decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换 ...

  3. 【python】浅谈encode和decode

    对于encode和decode,笔者也是根据自己的理解,有不对的地方还请多多指点. 编码的理解: 1.编码:utf-8,utf-16,gbk,gb2312,gb18030等,编码为了便于理解,可以把它 ...

  4. Python编码与解码

    # -*- coding: utf-8 -*- # 直接保存为Python脚本,对照执行结果会好看点. # 实验的内容都是在Python 2.7.x下进行的. # Python3默认采用unicode ...

  5. Python-2.7 : 编码问题及encode与decode

    普通的字符串在py2.7中都是以ASCII编码的,例如str=“abc”,若含有中文则会以gbk或者gb2312编码(GB2312是中国规定的汉字编码,也可以说是简体中文的字符集编码;GBK 是 GB ...

  6. python 编码与解码 decode解码 encode 编码

    >>> '无'   #gbk字符'\xce\xde'>>> str1 = '\xce\xde'>>> str1.decode('gbk')  # ...

  7. python编码和解码

    一.什么是编码 编码是指信息从一种形式或格式转换为另一种形式或格式的过程. 在计算机中,编码,简而言之,就是将人能够读懂的信息(通常称为明文)转换为计算机能够读懂的信息.众所周知,计算机能够读懂的是高 ...

  8. python 编码和解码

  9. python基础小知识,is和==的区别,编码和解码

    1.is和==的区别 1)id() 通过id()我们可以查看到一个变量表示的值在内存中的地址 >>> s1 = "Tanxu" >>> s2 = ...

随机推荐

  1. Burpsuite抓取https数据包

    Burpsuite抓取https包 浏览器代理设置 Burpsuite代理设置 启动Burpsuite,浏览器访问127.0.0.1:8080,点击CA Certificate,下载cacert.de ...

  2. Docker启动时提示Get Permission Denied while trying to connect解决方法

    环境描述 vmware15虚拟机安装centos7.4 64位系统,docker版本19.03.2 问题描述 安装完docker后,执行docker相关命令 docker run ubuntu:15. ...

  3. 中缀表达式转换为后缀表达式(python实现)

    中缀表示式转换为后缀表达式 需要一个存放操作符的栈op_stack,输出结果的列表output 步骤: 从左到右遍历表达式: 1. 若是数字,直接加入到output 2. 若是操作符,比较该操作符和o ...

  4. Python安装常见问题(1):zipimport.ZipImportError: can't decompress data(此问题不解决pip安装不成功)

    在CentOS以及其他的Linux系统中遇到安装包安装错误的原因,大多数都是因为缺少依赖包导致的,所以对于错误:zipimport.ZipImportError: can’t decompress d ...

  5. tornado跨域解决方法

    代码 class BaseHandler(tornado.web.RequestHandler): # 允许跨域访问的地址 def allowMyOrigin(self): allow_list = ...

  6. JAVA 高级特性枚举和泛型

    枚举: 语法:  public enum 枚举名 { 枚举值表(罗列所有值) }  例如:  public enum EnumTest{MON,TUE,WED.THU,FRI,SAT,SUN} 枚举操 ...

  7. 电池的QPNP模式

    名词解释: CV:Constant Voltage恒压 SMMB charger:Switch-ModeBattery Charger and Boost peripheral开关模式电池充电器和升压 ...

  8. [Linux] nginx记录多种响应时间

    官网介绍$request_time – Full request time, starting when NGINX reads the first byte from the client and ...

  9. C# Stack 集合学习

    Stack 集合学习 学习自:博客园相关文章 Stack<T>集合 这个集合的特点为:后进先出,简单来说就是新元素都放到第一位,而且顺序移除元素也是从第一位开始的. 方法一:Push(T ...

  10. 洛谷 P5690 [CSP-SJX2019]日期

    传送门 思路 大水题一道,判断一下即可 输入直接用快读读两个数就行了,不需要读一个\(char\)类型的字符 年月不能为\(0\),月份不能超过\(12\),天数不能超过\(31\) 另外在二月天数的 ...