用 python 抓一个包含汉字的 js 文件 显示乱码 什么鬼

2016-11-09 17:31:33 +08:00
 dousao

工行的一个包含汉字的 JS 文件。
他应该是在这个 JS 文件里写了一些配置信息。 同时有两个 JS 文件 1 个显示正常, 1 个显示乱码。
显示正常的路径: http://www.icbc.com.cn/ICBC/ICBCCOIN/coinparamData.js
显示乱码的路径: http://www.icbc.com.cn/ICBC/ICBCCOIN/coinBookData.js

显示乱码的文件:

python 新手,请解惑。

2291 次点击
所在节点    问与答
9 条回复
DoraJDJ
2016-11-09 17:35:28 +08:00
文字编码问题。
Sylv
2016-11-09 18:13:04 +08:00
第一个文件是 utf-8 编码的,所以可以在 pycharm 里显示正常。
第二个文件是 gbk 编码的, pycharm 用 utf-8 编码去显示它就出现乱码了。
猜你用的应该是 Python 2 ,解决方法是先用 gbk 编码 decode('gbk') 成 unicode ,然后再用 utf-8 编码 encode('utf-8') 成 str 。

推荐使用 requests ,会自动判断编码,就不用自己再手动处理编码了。
dousao
2016-11-09 19:15:38 +08:00
@Sylv 菜鸡请教,是如何判断出文件的编码的?你咋知道第二个是 GBK 第一个是 UTF8 的呢
dousao
2016-11-09 19:59:36 +08:00
@Sylv 还真是。我下了文件 用 notepad++ 看格式 但是它说是 gb2312 的,于是 decode 在 encode 不行。 decode gbk 再 encode 就行了。

接着用了 requests ,反现返回的 text 就自动帮你搞定了编解码 可以直接显示了,高端。

我在其他帖子里看到你关于 python 编解码的回复,应该对于这块比较了解了,不如写个文章出来 普及一下哈。
Sylv
2016-11-09 20:14:24 +08:00
@dousao
正常网页的头部 headers 里是会声明编码的,例如这样:
'Content-Type': 'text/html; charset=UTF-8'
但是有的网站写得不规范会没声明编码,例如你的这个例子,这种情况就得靠猜了。
而中文出现乱码问题一般就只和 gbk 和 utf-8 这两个编码有关系,所以分别用这两个编码 decode 下字符串,哪个编码没报错,字符串就是哪个编码了。
另外还可以用 chardet 库来自动猜编码,像 Requests 库在不知道网页是什么编码时就是用 chardet 来猜编码。
Sylv
2016-11-09 20:33:50 +08:00
@dousao
GBK 编码是 GB2312 编码的超集,是向下兼容 GB2312 编码的。所以一般保险点写 GBK 编码就好了。
dousao
2016-11-09 20:46:39 +08:00
@Sylv 感谢。感谢。明白了。
Khlieb
2016-11-09 21:21:00 +08:00
@Sylv GB18030 可否
podel
2020-07-11 10:43:02 +08:00
不要用 python2 已经被淘汰了。换 python3

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/319348

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX