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
l3rnao
V2EX  ›  Python

求助: 关于 request.body 中内容乱码的问题。

  •  
  •   l3rnao · 2016-03-07 11:31:29 +08:00 · 3573 次点击
    这是一个创建于 2978 天前的主题,其中的信息可能已经有所发展或是发生改变。
    各位巨巨,最近在用 python 做一个分析流量包的活。抓到的流量 request.body 的内容为乱码,无法解码。存在 redis 里,然后在 redis 里面显示的是这种编码:
    \u001d\xd6\xfa\xd1\\u0019\x9f1P\xb5\\u001e7\xe5c&\xaa\xbf
    请问各位 这是什么编码方式 要怎么解码呢 ?
    第 1 条附言  ·  2016-03-07 17:54:57 +08:00
    可能是我表述的不清楚。我说的是从交换机上镜像流量然后解析出来的 不是使用 requests 库产生的问题。另外目前这个问题我找到的原因是 body 本身是二进制文件。
    4 条回复    2016-03-07 12:05:14 +08:00
    wdg8106
        1
    wdg8106  
       2016-03-07 11:41:24 +08:00
    python 里面有个 chardet 模块,用来处理编码的问题很好用,
    比如 :
    a = b'haha',调用 chardet.detect(a),就可以输出:
    {'confidence': 1.0, 'encoding': 'ascii'}
    就可以清楚地看到是什么编码的了
    WangYanjie
        2
    WangYanjie  
       2016-03-07 11:56:08 +08:00
    crayonyi
        3
    crayonyi  
       2016-03-07 12:00:53 +08:00
    使用 requests 的时候,注意 2 点,基本可以解决大部分的编码问题:
    1. 设置编码为 apparent_encoding

    ```
    rsp = requests.get(url)
    rsp.encoding = rsp.apparent_encoding
    ```

    2. 返回使用 text , 而不是 content 或者 body

    ```
    result = rsp.text
    ```
    crayonyi
        4
    crayonyi  
       2016-03-07 12:05:14 +08:00
    因为在 python 中都是采用 unicode 编码的,所以如果想存储到数据库、 redis 、文本文件中,需要先转成 utf-8 存储。通用的方法是:存储前先 josn.dumps()处理成字符串 , 取数据的时候,取出用 json.loads()处理一下就 ok
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2071 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 10:46 · PVG 18:46 · LAX 03:46 · JFK 06:46
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.