对于encode和decode,笔者也是根据自己的理解,有不对的地方还请多多指点。

编码的理解:

1.编码:utf-8,utf-16,gbk,gb2312,gb18030等,编码为了便于理解,可以把它当做一个算法,用于加密和解密。基类编码字符集:unicode等,基类编码字符集可以理解为明文。其他编码字符集: ANSCII,汉字等,其他类编码字符集可以理解为密文。三者的关系是明文用算法加密成密文,密文用算法解密成明文。

2.Python 默认脚本文件都是 ANSCII 的,当代码中有非 ANSCII 码范围内的字符的时候(汉字及其他字符)。 则需要在程序的第一行或第二行指定编码声明:

# -*- coding=utf-8 -*-或者 #coding=utf-8 其他的编码如:gbk、gb2312也可以; 否则会出现类似:SyntaxError: Non-ASCII character '/xe4' in file ChineseTest.py on line 1, but no encoding declared; see http://www.pytho for details这样的异常信息。

编码转换:

一个str转换成特定编码类型,需要把str转为Unicode,然后从unicode转为特定的编码类型如:utf-8、gb2312等。

如何确认str类型的编码:

对于str类型可以理解为密文,我们需要通过decode或者unicode函数来进行解密,如下面例子:

>>> a="我"

>>> print unicode(a,"utf-8")

Traceback (most recent call last):

File "<pyshell#7>", line 1, in <module>

print unicode(a,"utf-8")

UnicodeDecodeError: 'utf8' codec can't decode byte 0xce in position 0: invalid continuation byte

“我”字解码时却出现了UnicodedecodeError,说明"我"不是用utf-8编码的,那就换个编码方式:gbk

>>> print unicode(a,"gbk")

>>> print a.decode("gbk")

ASCII与Unicode区别:

>>> "Hello World" #ASCII string,密文

'Hello World'

>>> u"Hello World" #Unicode string,明文

u'Hello World'

Encode和Decode:

1.encode():顾名思义是加密的意思,主要用于编码。

#将Unicode转换成普通的Python字符串:"编码(encode)"
 unicodestring = u"Hello world"
 utf8string = unicodestring.encode("utf-8")
 asciistring = unicodestring.encode("ascii")
 isostring = unicodestring.encode("ISO-8859-1")
 utf16string = unicodestring.encode("utf-16")

编码不符主要报错:

UnicodeEncodeError: ******: illegal multibyte sequence

2.decode():解码的意思,主要用于解码

#将普通的Python字符串转换成Unicode: "解码(decode)"
 plainstring1 = unicode(utf8string, "utf-8")
 plainstring2 = unicode(asciistring, "ascii")
 plainstring3 = unicode(isostring, "ISO-8859-1")
 plainstring4 = unicode(utf16string, "utf-16")

解码不符主要报错:UnicodeDecodeError:*******: invalid continuation byte

3.decode()和Unicode()的意思相同,都是用于解码,以下是官方语法:

S.decode([encoding[,errors]]) -> string or unicode

unicode(string[, encoding[, errors]]) -> unicode object

【python】浅谈encode和decode的更多相关文章

  1. python浅谈正则的常用方法

    python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...

  2. Python字符串的encode与decode研究心得——解决乱码问题

    转~Python字符串的encode与decode研究心得——解决乱码问题 为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“/xe4/xb8/xad/xe6/x96/x8 ...

  3. Python 浅谈注释的重要性

    最近参加了一个比赛,然后看到队友编程的代码,我觉得真的是难以下咽,几乎每个字符都要咨询他,用老师的话来说,这就是山炮编程员,所以此时的我意识到写一篇关于注释程序的重要性了,因此特地的写一篇文章帮助大家 ...

  4. Python 浅谈编程规范和软件开发目录规范的重要性

    最近参加了一个比赛,然后看到队友编程的代码,我觉得真的是觉得注释和命名规范的重要性了,因为几乎每个字符都要咨询他,用老师的话来说,这就是命名不规范的后续反应.所以此时的我意识到写一篇关于注释程序的重要 ...

  5. 【转 记录】python中的encode以及decode

    字符串编码常用类型:utf-8,gb2312,cp936,gbk等. python中,我们使用decode()和encode()来进行解码和编码 在python中,使用unicode类型作为编码的基础 ...

  6. Python 字符串的encode与decode

    python的str,unicode对象的encode和decode方法 python中的str对象其实就是"8-bit string" ,字节字符串,本质上类似java中的byt ...

  7. Python字符串的encode与decode研究心得乱码问题解决方法

    为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“\xe4\xb8\xad\xe6\x96\x87”的形式? 为什么会报错“UnicodeEncodeError: 'asc ...

  8. Python字符串的encode与decode

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

  9. Python字符串的encode与decode研究心得 乱码问题解决方法

    以下摘自:http://www.jb51.net/article/17560.htm 为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“\xe4\xb8\xad\xe6\x ...

随机推荐

  1. Struts2 OGNL使用详解(转)

    OGNL OGNL ( Object Graph Navigation Language ),对象图导航语言.这是一种强大的表达式语言,通过它可以非常方便的来操作对象属性. 在 Struts2 中,O ...

  2. Kali 找回root 密码的操作步骤

    1. 重启kali 进入grub 界面,选择 “kali GNU/Linux, Linux 3.7-trunk-686-pae(恢复模式)” 2. 然后按下键盘E 键 3.进入编辑模式,找到Linux ...

  3. pyvcf 模块

    最近一直在处理samtools freebayes gatk 产生的snp数据, 结果文件都是vcf,于是自己就写了相应的类,但是总是不够完善. 海宝推荐这个模块,他都推荐了 我还抱着我那烂代码不放干 ...

  4. 用java将excel表格中的内容修改后写入到另一个excel中

    package nn; import java.io.File; import jxl.Cell; import jxl.Sheet; import jxl.Workbook; import jxl. ...

  5. 基于时间延迟的Python验证脚本

    自己写的一段Python脚本,经常拿来验证一些sqlmap等工具跑不出数据的网站. GET类型: import urllib import urllib2 import time payloads = ...

  6. c 深度剖析 2

    1 while 等循环语句 1 break 和 continue的去别 2 将短的循环写在外面,长的写在里面: 3 循环嵌套尽量短 2 void void *p,为空指针类型,可以指向任何的类型 若函 ...

  7. 最小二乘法 java

    import java.util.ArrayList; import java.util.Collection; import org.apache.commons.math3.optim.Point ...

  8. POJ1419 Graph Coloring(最大独立集)(最大团)

                                                               Graph Coloring Time Limit: 1000MS   Memor ...

  9. TinyXML2读取和创建XML文件 分类: C/C++ 2015-03-14 13:29 94人阅读 评论(0) 收藏

    TinyXML2是simple.small.efficient C++ XML文件解析库!方便易于使用,是对TinyXML的升级改写!源码见本人上传到CSDN的TinyXML2.rar资源:http: ...

  10. SoftmaxLayer and SoftmaxwithLossLayer 代码解读

    SoftmaxLayer and SoftmaxwithLossLayer 代码解读 Wang Xiao 先来看看 SoftmaxWithLoss 在prototext文件中的定义: layer { ...