直到今天我才注意到 shell 采用不同编码会导致这么多的问题。这半天时间算是认栽了吧。
首先,Windows的默认编码为GBK,Linux的默认编码为UTF-8。看图:
这个是 Linux shell 的活动代码页编码:
这个是 windows powershell 的:
936 既是 GBK。
而在 Scrapy 中抓取页面然后提取出的信息是以 unicode字符串 的形式保存下来的。在python中print即可正常显示文字。但在 powershell 中会出以下问题:
即某些字符无法被 gbk 编码,然后就报错。
我试过修改 chcp 为 65001(utf-8的代码),无用。
这里我强调下,unicode是字符集, utf-8 和 gbk 是编码集。至于这俩有什么不同,可以这么说:unicode 定义了所有的字符(目前看来是的),用来展示给你看的,而编码集utf-8是一种字符集的实现,用来面向计算机的,主要用来存储为字节,以及网络传输的。
至于字符集和编码集分开的原因,是为了物尽其用,毕竟不是所有人都能用到unicode里所有的字符(节省资源。以后硬件更nb了可能就不用了)