python开头编码cc手_python的编码问题整理
发布日期:2021-06-24 12:43:20 浏览次数:2 分类:技术文章

本文共 2281 字,大约阅读时间需要 7 分钟。

一、编码和解码

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

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

编码类型

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

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

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

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

二、py2中的string编码

ab456e80cd8a20b457e5d2e9e5cc8c5e.png

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

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

258076854c38c703fdeb183c37270070.png

3、乱码处理

1)cmd中的乱码

现象:

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

1 #coding:utf-8

2 print '果果'

在cmd中运行python hello.py

7d13b29860977aa5104d132abea93419.png

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

1 #coding=utf-8

2 print u"果果"

运行结果

1657a084c1794c3a60d6610dfd4196e6.png

原因

我们在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编码

3bf7bb03b86bcbb646c41143fa4e4833.png

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

©2017 Baidu    \xe4\xba\xacICP\xe8\xaf\x81030173\xe5\x8f\xb7  gs.gif

\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'

转载地址:https://blog.csdn.net/weixin_32820131/article/details/114428275 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:java 虚拟方法_Java中的虚拟方法virtual method是什么含义
下一篇:python多线程爬取某网站全部h漫画_Python多线程爬取某网站表情包

发表评论

最新留言

表示我来过!
[***.240.166.169]2024年04月02日 18时55分25秒