编码与解码

  • 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. html+css面试题(一)

    XHTML与HTML的有何异同? HTML是一种基于WEB的网络设计语言,XHTML是基于XML的置标语言,XHTML可以认为是XML版的HTML,所以它的语法比较严谨:元素必须关闭,嵌套必须正确,大 ...

  2. 数据处理之以OLEDB方式读取Excel数据丢失的原因及解决方法

    1.引言 在应用程序的设计中,经常需要读取Excel数据或将Excel数据导入转换到其他数据载体中,C#读取Excel的方式有两种,一种是通过OLEDB方式读取,另一种为通过COM组件方式读取.近段时 ...

  3. mac环境下Python虚拟环境的安装和配置

    虚拟环境(virtualenv) 安装:在终端输入 pip install virtualenv 如果没安装pip会出现 pip: command not found,此时需要进行 sudo easy ...

  4. glibc提供的malloc()的调试工具

    关键词:MALLOC_CHECK_.mtrace().muntrace().MALLOC_TRACE.mprobe().-lmcheck等等. 1. MALLOC_CHECK_环境变量(double ...

  5. CSRF介绍

    对于常规的Web攻击手段,如XSS.CRSF.SQL注入.(常规的不包括文件上传漏洞.DDoS攻击)等,防范措施相对来说比较容易,对症下药即可,比如XSS的防范需要转义掉输入的尖括号,防止CRSF攻击 ...

  6. Javascript是如何工作的?

    作为一个前端开发者或者全栈开发者,一定非常熟练Javascript.程序员社区Stack Overflow的调查结果显示,Javascript是最常用的编程语言,连续多年排在第一名.发明Javascr ...

  7. 通过ES6 Module看import和require区别

    前言 说到import和require,大家平时开发中一定不少见,尤其是需要前端工程化的项目现在都已经离不开node了,在node环境下这两者都是大量存在的,大体上来说他们都是为了实现JS代码的模块化 ...

  8. 简单的Python GUI界面框架

    Python开发GUI界面, 可以使用pyQT或者wxpython. 不过不论pyQT还是wxpython都需要比较多的学习成本.Python工程往往是用于快速开发的,有些时候引入pyQT,wxpyt ...

  9. IT兄弟连 Java语法教程 数据类型1

    Java是强类型化的语言 Java是一种强类型话的语言,在开始时指出这一点是很重要的.实际上,Java的安全性和健壮性正是部分来自这一事实.强类型意味着什么呢?首先,每个变量都具有一种类型,每个表达式 ...

  10. 【shell脚本】优化内核参数===

    一.Linux内核参数优化 Sysctl命令用来配置与显示在/proc/sys目录中的内核参数.如果想使参数长期保存,可以通过编辑/etc/sysctl.conf文件来实现.  命令格式: sysct ...