一、编码和解码

1、编码(encode):将人类可以识别的语言(英文、中文等)转化成机器语言(01串)的过程,用于存储。

2、解码(decode):将机器语言转化成人类可识别的语言的过程,用于显示。

编码类型

1、ASCII编码:最早使用的编码方式

2、GBK编码:为了兼容中文,非ASCII编码

3、unicode编码:为了兼容所有语言,从ASCII扩展而来

4、utf-8编码:为了节省空间,对unicode的优化

二、py2中的string编码

1、python2默认的是ASCII编码方式

2、unicode是真正意义上的字符串;str是字节串。

3、乱码处理

1)cmd中的乱码

现象:

新建hello.py文件,内容如下

1 #coding:utf-8

2 print '果果'

在cmd中运行python hello.py

解决方法:中文前增加“u”

1 #coding=utf-8

2 print u"果果"

运行结果

原因

我们在win下的终端即cmd.exe去执行,cmd.exe本身也一个软件;当我们python2 hello.py时,python2解释器(默认ASCII编码)去按声明的utf8编码文件,而文件又是utf8保存的,所以没问题;问题出在当我们print'苑昊'时,解释器这边正常执行,也不会报错,只是print的内容会传递给cmd.exe用来显示,而在py2里这个内容就是utf8编码的字节数据,可这个软件默认的编码解码方式是GBK,所以cmd.exe用GBK的解码方式去解码utf8自然会乱码。

2)open()中的乱码

现象:

创建hello文本,保存成utf8:

我爱中国

代码如下

1 #coding=utf-8

2 f=open('hello.txt')3 print f.read()

运行结果

C:\Python27\python.exe E:/pyClass/temp/hello.py

鎴戠埍涓浗

解决:

open()中加入encoding='utf-8'关键字参数,但是open()方法没有此参数;使用codecs.open(),代码如下:

1 #coding=utf-8

2 importcodecs3 f=codecs.open('hello.txt',encoding='utf8')4 print f.read()

运行结果

C:\Python27\python.exe E:/pyClass/temp/hello.py

我爱中国

原因:

win的操作系统安装时是默认的gbk编码,当执行open函数时,调用的是操作系统打开文件,操作系统用默认的gbk编码去解码utf8的文件,自然乱码。

4、对于Python代码中避免遇到编码问题,有一些小建议:

字符编码声明:在代码开头声明编码格式

使用codecs的open函数处理文本文件

尽可能使用unicode而不是str:在所有字符串的引号前加u

三、py3的string编码

1、py3默认编码方式utf-8

2、str类型存unicode数据,bytse类型存bytes数据

3、乱码处理

1)cmd打印中文,不存在乱码问题

2)open()文件乱码问题,处理同py2

3)网页的编码

1 #coding=utf-8

2 importrequests3

4 res = requests.get("http://www.baidu.com")5 data =res.content6 print(data)7 print(type(data))

运行结果

"C:\Program Files\Python36\python3.exe" E:/pyClass/temp/hello.py

b'\r\n

\xe7\x99\xbe\xe5\xba\xa6\xe4\xb8\x80\xe4\xb8\x8b\xef\xbc\x8c\xe4\xbd\xa0\xe5\xb0\xb1\xe7\x9f\xa5\xe9\x81\x93

\xe6\x96\xb0\xe9\x97\xbb hao123 \xe5\x9c\xb0\xe5\x9b\xbe \xe8\xa7\x86\xe9\xa2\x91 \xe8\xb4\xb4\xe5\x90\xa7 \xe7\x99\xbb\xe5\xbd\x95 \xe6\x9b\xb4\xe5\xa4\x9a\xe4\xba\xa7\xe5\x93\x81

\xe5\x85\xb3\xe4\xba\x8e\xe7\x99\xbe\xe5\xba\xa6 About Baidu

©2017 Baidu \xe4\xbd\xbf\xe7\x94\xa8\xe7\x99\xbe\xe5\xba\xa6\xe5\x89\x8d\xe5\xbf\x85\xe8\xaf\xbb  \xe6\x84\x8f\xe8\xa7\x81\xe5\x8f\x8d\xe9\xa6\x88 \xe4\xba\xacICP\xe8\xaf\x81030173\xe5\x8f\xb7 

\r\n'

要正常显示的话,需要要使用decode()方法

1 #coding=utf-8

2 importrequests3

4 res = requests.get("http://www.baidu.com")5 data =res.content6 print(data.decode('utf-8'))

4、requests返回gbk乱码问题

现象:使用requests模块,发送请求,返回解码时报错

UnicodeEncodeError: 'gbk' codec can't encode character '\xab' in position 18864: illegal multibyte sequence

解决:修改python的默认编码,增加如下代码

1 #coding=utf-8

2 importio3 importsys4 importrequests5

6 sys.stdout=io.TextIOWrapper(sys.stdout.buffer,encoding='gb18030')

原因:

win7的默认编码格式是:gbk

cmd——chcp——936

python3的默认编码格式:utf-8

>>> sys.getdefaultencoding()

'utf-8'

python开头编码cc手_python的编码问题整理相关推荐

  1. python编码转换在线_Python字符编码转换Unicode和str

    ## str 我们平时写的用引号括起来的字符串都是str类型的. >>> x = '哈哈' >>> x '\xb9\xfe\xb9\xfe' ### 根据上面的打印 ...

  2. python编码转换规范_Python转载[编码规范]

    转自:http://blog.csdn.net/lanphaday/article/details/6601123 但是有些如果与python自带的类库有冲突的做了适当的修改. 1 编码 >&g ...

  3. python中打开文件提示编码当时错误_Python:文件编码错误

    从几天开始,我就在用Python编写的小程序中处理这个烦人的问题.在 我经常使用MediaWiki-最近我做文档从.doc到Wikisource的转换.在 在Libre Office中打开micros ...

  4. python 编码解码原理_Python的编码解码问题

    这两天进行网抓,被python的编解码问题搞得一脸懵比,虽然网上能够搜到各种各样的解决方案,不乏从原理到实践的精品,然而似乎却并不奏效,经自行摸索,本文特针对编解码问题,作以下最简单却最实用的总结: ...

  5. python requests编码的问题_python requests 编码问题

    url = host + path headers = {...} data = {...} files = {...} files两种类型: 字典和 元组 { "field1" ...

  6. python基础知识500题_python爬虫基础知识点整理

    更多编程教程请到:菜鸟教程 https://www.piaodoo.com/ 友情链接: 高州阳光论坛https://www.hnthzk.com/ 人人影视http://www.sfkyty.com ...

  7. python面向对象大段代码_python面向对象部分简单整理

    面向对象 VS 面向过程 面向过程 面向过程的程序设计的核心是过程(流水线式思维) 优点: 极大的降低了写程序的复杂度 缺点: 一整个过程(流水线)只能解决一个问题,若问题更改,代码几乎要全部重写. ...

  8. python中string什么意思_python字符串(string)方法整理

    C C语言开发 python字符串(string)方法整理 python中字符串对象提供了很多方法来操作字符串,功能相当丰富. print(dir(str)) [..........'capitali ...

  9. python常用函数的用法_python中常用函数整理

    1.map map是python内置的高阶函数,它接收一个函数和一个列表,函数依次作用在列表的每个元素上,返回一个可迭代map对象. class map(object):""&qu ...

  10. python自动化办公是什么_Python自动化办公知识点整理汇总

    知乎上有人提问:用python进行办公自动化都需要学习什么知识呢? 这可能是很多非IT职场人士面临的困惑,想把python用到工作中,却不知如何下手?python在自动化办公领域越来越受欢迎,批量处理 ...

最新文章

  1. 用友登录控件Vbs脚本
  2. VS2005新建应用工程出错解决方法
  3. 【黑科技】在alv中设置字体样式
  4. rust编程之道 pdf_LPC: 想在内核里引入Rust,还需要做很多决定
  5. Perl学习笔记(2)
  6. PyTorch随笔-0
  7. SSH(Secure Shell Protocol)命令之 grep
  8. 《地下城与勇士歼灭贝内尔》回合格斗
  9. scala python_Scala与Python | 哪种编程语言更好
  10. 使用Tomcat Catalina进行Tomcat服务器虚拟目录设置
  11. 【转】PHP对象在内存中的分配
  12. 解决 react-router 中 history is 'undefined' 的问题
  13. php编写文章发布程序教程,PHP开发文章发布系统之后台文章修改处理程序
  14. 括号匹配算法Java实现
  15. alisql mysql_AliSQL 5.6.32 vs MySQL 5.7.15抢鲜测试
  16. 关于《windows游戏编程大师技巧》的源代码
  17. python win32api messagebox_如何在Python中使用Win32 API?
  18. 简单的c语言游戏编程打地鼠,少儿创意编程scratch初级游戏--打地鼠
  19. 只有10分,5分,2分,1分的硬币;顾客付款x分,商品价格y分。如何找零所使用的硬币最少(递归实现)
  20. 关于四川华图省考面试 1:1职位保护的承诺函

热门文章

  1. 对游戏编程开发的一点思考
  2. discuz手机端默forum.php,discuz手机wap版模板开发方式简述
  3. 日更第1天:Linux常用命令之dnf用法
  4. 风花雪月·《基层风云·1》·四
  5. 无法打开excel powermap 三维地图
  6. linux用mame玩游戏,Ubuntu下用xmame玩街机游戏
  7. 怎么建立局域网_智能电视局域网共享怎么操作?多数品牌都适用的方法!
  8. *sql注入实战--记一次绕过WTS-WAF拦截注入**
  9. 龙芯CPU频率为什么上不去?
  10. 【信息安全】-身份认证技术