新手,求教关于python3编码的问题

Python011

新手,求教关于python3编码的问题,第1张

你需要明白两个概念:

什么叫字符串字节

在Python中字符串是指一串可以展示在终端里、供人阅读的字符,至于字符采用什么编码并不重要,同样的文字,可能是用Unicode、UTF-8或GBK编码,但打印在终端中的内容相同,那么就认为是同一串字符串。而字节串是指将字符串通过某种编码转换得到的一串字节,同样一个字符串,使用不同的编码转换后得到的字节串可能完全不同。

什么叫encode、decode

encode中文为编码,顾名思义,是将字符串以某种编码形式编码得到字节串的过程;相反,decode中文为解码,是将字节串以某种编码形式翻译得到字符串的过程。

a是一个字符串它的内容是“周杰伦”这三个字,类型是str;b = a.encode('utf-8')是将a以utf-8形式编码得到的字节串,它的内容是“周杰伦”这三个字的utf-8编码,类型是bytes

代码如下:

>>>import urllib.request

>>>response = urllib.request.urlopen('h)

>>>html = response.read()

>>>print(html.decode('utf-8'))

结果:

Traceback (most recent call last):

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

print(html.decode('utf-8'))

UnicodeDecodeError: 'utf-8' codec can't decode byte 0x8b in position 1: invalid start byte

求高手帮忙解答。

问题已经解决,原来这个网页数据是用gzip压缩过的,用Python的gzip包解压缩后再解码就可以了。

url编码:

import urllib

url = 'http://test.com/s?wd=哈哈'   #如果此网站编码是gbk的话,需要进行解码,从gbk解码成unicode,再从Unicode编码编码为utf-8格式。

url = url.decode('gbk', 'replace')

print urllib.quote(url.encode('utf-8', 'replace'))

参考资料

Python3 如何对url解码?.CSDN博客[引用时间2018-1-1]