VB.net 2010 视频教程 VB.net 2010 视频教程 python基础视频教程
SQL Server 2008 视频教程 c#入门经典教程 Visual Basic从门到精通视频教程
当前位置:
首页 > 编程开发 > Python基础教程 >
  • python基础教程之Python—编码与解码(encode()和decode())

本站最新发布   Python从入门到精通|Python基础教程
试听地址  
https://www.xin3721.com/eschool/python.html


编码与解码

  • 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:设置自动解码的方式,再编码,
复制代码

 

相关教程