服务器返回的是 gzip 压缩过的内容
即使请求中没有设定 Accept-Encoding 头
>>> import urllib.request
>>> r = urllib.request.urlopen('
http://anidb.net/perl-bin/animedb.pl?show=main')
>>> r.getheader('Content-Encoding')
'gzip'
所以需要自行 gzip,如果你用 urllib 的话
>>> import gzip
>>> data = r.read()
>>> gzip.decompress(data)
b'<!DOCTYPE html>\n<html...
再次进行 decode 就可以得到 unicode 字符串
>>> gzip.decompress(data).decode('utf-8')
'<!DOCTYPE html>\n<html...
或者使用 requests
它会检查相关的 http 头然后自动解压并尝试自动解码
>>> import requests
>>> r = requests.get('
http://anidb.net/perl-bin/animedb.pl?show=main')
>>> r.text
'<!DOCTYPE html>\n<html...