作者回复: 我想你指的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软件根据文件内容自动检测到的, .decode 是程序按照utf-8 编码做的解码工作
作者回复: 除了利用IDE以外, 还有个更权威的参考位置叫做官方文档。 官方文档查找起来的便利性要比IDE差一些。但是主要有三个地方可以找到这些函数的定义和使用参考 1 语言参考 https://docs.python.org/zh-cn/3.8/reference/index.html#reference-index 2 标准库 https://docs.python.org/zh-cn/3.8/library/index.html 3 内置函数 https://docs.python.org/zh-cn/3.8/library/functions.html 如果是第三方库则要看第三方库的文档,比如第三方库requests,要找到它的文档,需要在这里: https://docs.python-requests.org/zh_CN/latest/ 找到该库下函数的参考
作者回复: UTF-8是UNICODE的一种变长字符编码 ,长度在1至6字节,我在视频中的描述不够准确,感谢指正
作者回复: pycharm会根据类型推断进行提示,类似 dir(类型),看支持什么方法,后面就提示哪些可使用的方法
作者回复: 连接超时。要么是网速太慢,要么是dns解析的时间过长,要么是网站响应过慢,都会导致 urlopen超时,需要增加timeout时间,
作者回复: 没有复现你的问题,是python3的那个具体版本? 'request' is not defined 是urllib目录里没有request这个方法
作者回复: 出现大段错误时候不要慌,先从最下面的错误提示看。 这里的socket是建立网络连接的功能,那么time out 是表示连接超时,也就是你到达对方的网络不通。