V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
omg21
V2EX  ›  Python

同一个论坛的页面,为什么编码转换不一致?

  •  
  •   omg21 · 2016-08-31 21:53:45 +08:00 · 1954 次点击
    这是一个创建于 2793 天前的主题,其中的信息可能已经有所发展或是发生改变。
    我在爬取一个论坛的页面的时候,遇到一个问题:有个别页面没法转码。
    比方说论坛的列表页,我要爬取 10 页,然后转成 Unicode 码,保存下来,大部分页面都是正常的,但是会有两个页面没有转成 Unicode 。但是这 10 个页面都是可以取到数据的,现在问题就出在转码上。我很奇怪,这 10 个页面头部都是下面的代码,都是用的 gbk 编码。为什么有的没法转换。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\n<html xmlns="http://www.w3.org/1999/xhtml">\n<head>\n<meta http-equiv="Content-Type" content="text/html; charset=gbk" />

    我用下面的语句进行转换
    def encoding(bm):
    types = ['utf-8','utf-16','gb2312','gbk']
    printtxt(bm)
    for type in types:
    try:
    return bm.decode(type) #我把这里的 type 换成'gbk'后,该能转换的还能转换,那两个还是没有转成。
    except:
    pass

    为什么 10 个页面都是一样的,有的能转成,有的转不成呢?
    7 条回复    2016-09-02 06:46:04 +08:00
    purrgil
        1
    purrgil  
       2016-08-31 22:27:58 +08:00
    可能是有某些已经乱码或者本身是特殊字符。
    kanezeng
        2
    kanezeng  
       2016-08-31 22:50:46 +08:00
    把有问题的页面保存下来,手动转换了看看啊
    yangg
        3
    yangg  
       2016-08-31 23:14:56 +08:00 via iPhone
    取 meta 而不是一个个试,然后加上转换不报错参数
    jswxg
        4
    jswxg  
       2016-09-01 08:21:15 +08:00
    bm.decode(type, 'ignore') 试试
    omg21
        5
    omg21  
    OP
       2016-09-01 18:52:07 +08:00
    @jswxg 试过了,不是 ignore 这个问题
    omg21
        6
    omg21  
    OP
       2016-09-01 18:55:38 +08:00
    @purrgil 你说的对,我对整个页面排查后,发现有一个字符\xa4h 无法编译,为什么确定是这个字符,因为它前后的字符都能正常转换,只要加上它就报错,在网站上这个字符的位置显示的是个方框,不知道这种情况怎么处理。
    我有心想把这个字符删掉,可是其他页面也有没法转码的情况,而且是不同的字符,这要一点点删除不现实。
    purrgil
        7
    purrgil  
       2016-09-02 06:46:04 +08:00
    @omg21 windows 下的 CMD 默认只能显示 GBK 范围内的字符。很多字符无法显示。
    python 的 IDLE 好像也不能完整显示所有的 unicode 字符。

    所以转换前后不要输出到终端。
    可以考虑写到 HTML 里。用 chrome 之类的浏览器打开。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   5311 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 30ms · UTC 08:01 · PVG 16:01 · LAX 01:01 · JFK 04:01
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.