作者回复: 我想你指的decode和encoding应该是这两个Python语句:
response = request.urlopen('http://httpbin.org/post', data=data)
print(response.read().decode('utf-8'))
data = bytes(parse.urlencode(dict), encoding='utf8')
这里从字面来看,decode()是函数,encoding是bytes()函数的参数,他们不能放在一起对比,就像雷锋和雷锋塔一样
那从功能上来看,设计encode()、decode()、bytes()、str()这些函数是做什么用的呢?
在Python3中严格区分了字符串和字节的概念,在网络的底层传输的文字就是字节形式,而上层是字符串形式,我们”看得懂“的是字符串,但是很多底层函数需要用到字节形式;
就必然产生了字符串和字节之间相互转换的需求,那么上面提到的几个函数就是用来做字符串和字节之间转换的。
如我们需要字符串转换成字节,可以使用bytes()或encode()进行转换:
s='你好'
b1=s.encode('utf-8') # 使用utf8编码将字符串转换为字节
b2=bytes(s, encoding='utf-8') #和上面功能一样
那如果将字节转换回字符串呢?
b1.decode('utf-8')
str(b2, encoding='utf-8')
这就是这几个函数之间的区别了
作者回复: pycharm会根据类型推断进行提示,类似 dir(类型),看支持什么方法,后面就提示哪些可使用的方法
作者回复: 连接超时。要么是网速太慢,要么是dns解析的时间过长,要么是网站响应过慢,都会导致 urlopen超时,需要增加timeout时间,
作者回复: 没有复现你的问题,是python3的那个具体版本?
'request' is not defined 是urllib目录里没有request这个方法
作者回复: 右下角是提示,是pycharm软件根据文件内容自动检测到的, .decode 是程序按照utf-8 编码做的解码工作
作者回复: 出现大段错误时候不要慌,先从最下面的错误提示看。
这里的socket是建立网络连接的功能,那么time out 是表示连接超时,也就是你到达对方的网络不通。