V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
dousao
V2EX  ›  问与答

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

  •  
  •   dousao · 2016-11-09 17:31:33 +08:00 · 2314 次点击
    这是一个创建于 2966 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

    显示乱码的文件:

    • urllib 直接 get 的话 里面的汉字,在 pycharm 里显示都是乱码

    • selenium 的 webdriver get 这个文件,然后用 driver.page_source 获取返回的源码,汉字也是乱码,还会自动在这个 js 文件的前后内容加上<html><head><head><body></body></html>.

    python 新手,请解惑。

    9 条回复    2020-07-11 10:43:02 +08:00
    DoraJDJ
        1
    DoraJDJ  
       2016-11-09 17:35:28 +08:00 via Android
    文字编码问题。
    Sylv
        2
    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
        3
    dousao  
    OP
       2016-11-09 19:15:38 +08:00
    @Sylv 菜鸡请教,是如何判断出文件的编码的?你咋知道第二个是 GBK 第一个是 UTF8 的呢
    dousao
        4
    dousao  
    OP
       2016-11-09 19:59:36 +08:00
    @Sylv 还真是。我下了文件 用 notepad++ 看格式 但是它说是 gb2312 的,于是 decode 在 encode 不行。 decode gbk 再 encode 就行了。

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

    我在其他帖子里看到你关于 python 编解码的回复,应该对于这块比较了解了,不如写个文章出来 普及一下哈。
    Sylv
        5
    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
        6
    Sylv  
       2016-11-09 20:33:50 +08:00
    @dousao
    GBK 编码是 GB2312 编码的超集,是向下兼容 GB2312 编码的。所以一般保险点写 GBK 编码就好了。
    dousao
        7
    dousao  
    OP
       2016-11-09 20:46:39 +08:00
    @Sylv 感谢。感谢。明白了。
    Khlieb
        8
    Khlieb  
       2016-11-09 21:21:00 +08:00 via Android
    @Sylv GB18030 可否
    podel
        9
    podel  
       2020-07-11 10:43:02 +08:00
    不要用 python2 已经被淘汰了。换 python3
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1058 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 22:48 · PVG 06:48 · LAX 14:48 · JFK 17:48
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.