1
aaaa007cn 2015-04-01 08:08:47 +08:00
错误提示已经讲得很清楚了
Non-BMP character not supported in Tk Tk 不支持 Non-BMP(非基本多文种平面)字符 而 IDLE 正是基于 Tcl/Tk 的 关于 Non-BMP 可以参考 wikipedia https://en.wikipedia.org/wiki/Plane_%28Unicode%29 另外 问题是出在 print(page),而不是之前的 decode 显式 encode 吧 print(page.encode('utf-8')) |
2
soratadori OP @aaaa007cn 后面再加上 .encode('utf-8')) 我也试过,但是出来的结果是:
b'\x1f\x08\x00\x00\x00\x00\x00\x00\x03Y[\xdb\xb6\x0e~N~\x05Vv:=6M:uShkJTD\xca\xbb>\x00\xc8\x92,Yn \x0f\x04\t\x10F |
3
aaaa007cn 2015-04-01 21:21:26 +08:00 1
请贴出网页地址先
|
4
soratadori OP |
5
aaaa007cn 2015-04-03 00:56:04 +08:00 1
服务器返回的是 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... |