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

%E6%BF%80%E6%88%982 这个是什么编码

  •  
  •   ciba1990 · 2015-07-12 18:56:21 +08:00 · 6081 次点击
    这是一个创建于 3220 天前的主题,其中的信息可能已经有所发展或是发生改变。

    转译中文是‘激战2’,在python里如何将字符串‘激战2’转换为‘%E6%BF%80%E6%88%982’。

    26 条回复    2015-07-13 21:25:15 +08:00
    clijiac
        1
    clijiac  
       2015-07-12 19:05:42 +08:00
    base64吧
    imlonghao
        2
    imlonghao  
       2015-07-12 19:05:58 +08:00 via Android
    @clijiac ...................
    BraveRBT
        3
    BraveRBT  
       2015-07-12 19:06:27 +08:00
    BraveRBT
        4
    BraveRBT  
       2015-07-12 19:08:42 +08:00
    举个栗子
    urllib.urlencode({"逆战2":"hehe "})
    dangge
        5
    dangge  
       2015-07-12 19:09:20 +08:00   ❤️ 1
    lerry
        6
    lerry  
       2015-07-12 19:10:17 +08:00
    import urllib

    print urllib.unquote("%E6%BF%80%E6%88%982")
    >>激战2
    clijiac
        7
    clijiac  
       2015-07-12 19:10:21 +08:00
    @imlonghao 一时脑抽....想到图片去了
    lerry
        8
    lerry  
       2015-07-12 19:11:25 +08:00
    print urllib.quote("激战2")
    >>%E6%BF%80%E6%88%982
    zonghua
        9
    zonghua  
       2015-07-12 19:11:58 +08:00
    @lerry 人生苦短,我用python
    blank4me
        10
    blank4me  
       2015-07-12 19:32:47 +08:00
    貌似就叫做url encode?本质而言是UTF-8。“激”的UTF-8是E6 BF 80。
    ciba1990
        11
    ciba1990  
    OP
       2015-07-12 20:15:59 +08:00
    django报错 KeyError at /search/
    u'\u6fc0'
    代码:
    url='http://tieba.baidu.com/f?ie=utf-8&kw=%s&fr=search' % quote(“激战2”)
    html=urllib2.urlopen(url).read()
    soup = BeautifulSoup(html)

    如果url=’http://tieba.baidu.com/f?ie=utf-8&kw=%E6%BF%80%E6%88%982&fr=search‘却又可以。


    @lerry
    @dangge
    @BraveRBT
    anthonyeef
        12
    anthonyeef  
       2015-07-12 20:21:23 +08:00
    @dangge 你的笔记打不开
    ciba1990
        13
    ciba1990  
    OP
       2015-07-12 20:31:31 +08:00
    刚才代码打错了
    url='http://tieba.baidu.com/f?ie=utf-8&kw=%s&fr=search' % quote(request.GET.get('q',''))
    html=urllib2.urlopen(url).read()
    soup = BeautifulSoup(html)
    上面打的那个代码是可以运行的。request.GET.GET('q','')获取的就是"激战2“,不知道哪里的问题。
    skywatcher
        14
    skywatcher  
       2015-07-12 20:54:33 +08:00
    @ciba1990 不应该啊,百度的gbk和utf8编码都可以访问啊,“激战2”的gbk的quote是`%BC%A4%D5%BD2`, utf8的quote是`%E6%BF%80%E6%88%982`

    http://tieba.baidu.com/f?ie=utf-8&kw=%BC%A4%D5%BD2&fr=search

    http://tieba.baidu.com/f?ie=utf-8&kw=%E6%BF%80%E6%88%982&fr=search

    这两个都是能访问的,你把urlprint出来看看哪里不一样
    ciba1990
        15
    ciba1990  
    OP
       2015-07-12 21:22:54 +08:00
    @skywatcher
    就是URL报错,
    /home/mysite/search/views.py in index
    url='http://tieba.baidu.com/f?ie=utf-8&kw=%s&fr=search' % quote(request.GET.get('q','')) ...
    ▶ Local vars
    /usr/lib/python2.7/urllib.py in quote
    return ''.join(map(quoter, s)) ...
    ▶ Local vars
    ciba1990
        16
    ciba1990  
    OP
       2015-07-12 21:23:42 +08:00
    @skywatcher 英文没问题 中文报错
    dangge
        17
    dangge  
       2015-07-12 21:46:46 +08:00
    @anthonyeef 吓到了 V2过来的流量太大了...
    本来是放在一个小服务商的机器上,现在迁移了一下...
    paicha
        18
    paicha  
       2015-07-12 21:50:51 +08:00
    @dangge 这是有多小……
    ciba1990
        19
    ciba1990  
    OP
       2015-07-12 21:58:45 +08:00
    @skywatcher 解决了 3Q
    cmheia
        20
    cmheia  
       2015-07-13 08:44:47 +08:00
    @dangge 笔记里面可见 3 处小错误……我是强迫症
    BraveRBT
        21
    BraveRBT  
       2015-07-13 08:50:18 +08:00   ❤️ 1
    @dangge
    @cmheia
    比如bash64 ==>base 64
    眼拙,找不到其他的
    总之修改下吧~
    dangge
        22
    dangge  
       2015-07-13 10:50:25 +08:00 via Android
    @cmheia
    @BraveRBT
    Base的手误已改……求指教剩下两处错误
    jsq2627
        23
    jsq2627  
       2015-07-13 12:13:42 +08:00   ❤️ 2
    @dangge 你把 Unicode,UTF-8,URL编码独立开来写有一定误导性
    Unicode只规定了字符到码点的对应,没有规定存储形式。UTF-8/UTF-16/UTF-32是它的几种存储形式。URL Encoding 没有规定用什么编码,它只是把二进制用字符串表现出来了。笔记里最后提到的“unicode编码”实际是UTF-16的字符串表现。
    caomaocao
        24
    caomaocao  
       2015-07-13 14:20:07 +08:00
    utf-8或者Gbk吧 用url.unqote把%装成/x先出来先
    aprikyblue
        25
    aprikyblue  
       2015-07-13 17:24:49 +08:00   ❤️ 1
    @dangge

    + base64最后两位不一定是等号,可能没有,也可能有一个或两个。
    编码时最后不足3字节的,用0填充补位,再用等号表示0,才出现了这种现象。

    + 我对编码没有仔细深究,但我认为把(UTF-8)、(unicode)与(MD5、base64、urlencode)并列在一起不正确,并不是一个层面上的东西。

    MD5、base64、urlencode 是encoding
    unicode 是charset,utf-8则是unicode在计算机中的一种具体存储方法。
    有的人把charset和encoding混淆,特别是用中文都说作编码的情况下很容易就。。

    urlencode 确实是%xx的形式,但是其只是指定了表现形式,没有具体指定是用哪一种charset(unicode或是gbk),因此用不同的charset进行urlencode会有不同的结果。
    \uxxxx 是unicode转义字符,当然使用unicode,其中xxx是十六进制
    &#xxx; 是HTML转义字符,资料上说是使用lantin-1,不过unicode貌似也可以?xxx是十进制

    善用搜索
    xujiaze
        26
    xujiaze  
       2015-07-13 21:25:15 +08:00
    四楼 url加密。。其实没啥用,我个人的站都是先encode关键词,好像能防SQL注入。翻译还是很麻烦的,其实你自己进入http://www.baidu.com/?s=转义字符 就会告诉你是什么了。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   873 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 22:52 · PVG 06:52 · LAX 15:52 · JFK 18:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.