【python】浅谈encode和decode
对于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的更多相关文章
- python浅谈正则的常用方法
python浅谈正则的常用方法覆盖范围70%以上 上一次很多朋友写文字屏蔽说到要用正则表达,其实不是我不想用(我正则用得不是很多,看过我之前爬虫的都知道,我直接用BeautifulSoup的网页标签去 ...
- Python字符串的encode与decode研究心得——解决乱码问题
转~Python字符串的encode与decode研究心得——解决乱码问题 为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“/xe4/xb8/xad/xe6/x96/x8 ...
- Python 浅谈注释的重要性
最近参加了一个比赛,然后看到队友编程的代码,我觉得真的是难以下咽,几乎每个字符都要咨询他,用老师的话来说,这就是山炮编程员,所以此时的我意识到写一篇关于注释程序的重要性了,因此特地的写一篇文章帮助大家 ...
- Python 浅谈编程规范和软件开发目录规范的重要性
最近参加了一个比赛,然后看到队友编程的代码,我觉得真的是觉得注释和命名规范的重要性了,因为几乎每个字符都要咨询他,用老师的话来说,这就是命名不规范的后续反应.所以此时的我意识到写一篇关于注释程序的重要 ...
- 【转 记录】python中的encode以及decode
字符串编码常用类型:utf-8,gb2312,cp936,gbk等. python中,我们使用decode()和encode()来进行解码和编码 在python中,使用unicode类型作为编码的基础 ...
- Python 字符串的encode与decode
python的str,unicode对象的encode和decode方法 python中的str对象其实就是"8-bit string" ,字节字符串,本质上类似java中的byt ...
- Python字符串的encode与decode研究心得乱码问题解决方法
为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“\xe4\xb8\xad\xe6\x96\x87”的形式? 为什么会报错“UnicodeEncodeError: 'asc ...
- Python字符串的encode与decode
首先要搞清楚,字符串在Python内部的表示是unicode编码. 因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unic ...
- Python字符串的encode与decode研究心得 乱码问题解决方法
以下摘自:http://www.jb51.net/article/17560.htm 为什么Python使用过程中会出现各式各样的乱码问题,明明是中文字符却显示成“\xe4\xb8\xad\xe6\x ...
随机推荐
- vim-airline的theme
仓库位置: https://github.com/vim-airline/vim-airline-themes 这些内置的这些主题,可以直接使用,方法是在.vimrc中写 let g:airline_ ...
- Redis 设计与实现读书笔记一 Redis字符串
1 Redis 是C语言实现的 2 C字符串是 /0 结束的字符数组 3 Redis具体的动态字符串实现 /* * 保存字符串对象的结构 */ struct sdshdr { // buf 中已占用空 ...
- Struts2 OGNL使用详解(转)
OGNL OGNL ( Object Graph Navigation Language ),对象图导航语言.这是一种强大的表达式语言,通过它可以非常方便的来操作对象属性. 在 Struts2 中,O ...
- MySQL优化—工欲善其事,必先利其器之EXPLAIN(转)
最近慢慢接触MySQL,了解如何优化它也迫在眉睫了,话说工欲善其事,必先利其器.最近我就打算了解下几个优化MySQL中经常用到的工具.今天就简单介绍下EXPLAIN. 内容导航 id select_t ...
- 动态数组 - ArrayList
前言 如果数组的大小要随时间变化,那么数组操作起来就比较麻烦. 在C++中,这种情况要用到动态向量Vector. 而Java中,提供了一种叫做ArrayList的泛型数组结构类型,提供相似的作用. 其 ...
- UVa 10795 - A Different Task
题目大意:给出n,表示说有n个大小不同的盘子,然后再给出每个盘子的初始位置和目标位置,要求计算出最少的步数使得每个盘子都移动到它的目标位置. 分析: 首先找最大不在目标柱子上的盘子K,因为如果最大的 ...
- Android Bitmap OOM处理
public int calculateInSampleSize(BitmapFactory.Options option, int rWidth, int rHeight) { ...
- php部分--面向对象三大特性-封装(另加连续调用的一个例子)、继承(重写、重载的例子)、多态;
一.封装性: 目的:为了使类更加安全. 做法:1设置私有成员 2在类中建方法,访问私有成员 3在方法里边加控制(if) 私有成员访问的两种方法: 方法一:set(可写) get(可读)做方法(可读可写 ...
- error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCompat.Light'.,appcompatv7
error: Error retrieving parent for item: No resource found that matches the given name 'Theme.AppCom ...
- Vue.js相关知识3-路由
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...