Tuesday, December 8, 2009

URL字符集

URL就看得多了. 但是没有理会过它的字符集

原本无聊, 突然对google docs发出的东西感兴趣. 本人绝对相信: docs发出去的是文件的差异数据. 也就是不会每次save发出全文件的.

contentIsDelta=true&delta=%3D1850%09%2B%25E6%2588%2591%25E6%2588%2591%25E6%2588%2591%25E6%2588%2591%09%3D4(......)还有很长.

delta这词就是变化, 差异的意思.

看到这数据就发毛: 这是什么编码的数据?

一堆"%"的, 应该与urllib.unqoute产生的数据相似, 那么, URL本身又是如何定义的呢?

看RFC文档嘛, 我最怕的了. 还是看一些blog比较快手点(又不是搞理论的) , 如:
* http://netzreport.googlepages.com/online_tool_for_url_en_decoding.html

这种玩法就:  Percent-encoding ( http://en.wikipedia.org/wiki/Percent-encoding )

就是URL只能由A-Z, a-z, 0-9, - _ . ~这些有限的字符组成. 其它都使用"%十六进制"表示

其实我传的只是几个"我"字, 看上面的一串字符串, 是有一段重复的. 所以就用一段来试一下:

In [16]: urllib.unquote('%2588%2591%25E6')
Out[16]: '%88%91%E6'


还是有一个"%"号的. 再看一下"我"字的外码:
In [17]: '我'
Out[17]: '\xe6\x88\x91'

有点像了~~~~ 应该是始点取错了, 应该是: "%25E6%2588%2591", 看试一下:
In [18]: urllib.unquote('%25E6%2588%2591')
Out[18]: '%E6%88%91'

OK, 和'我'字的外码太像了. 只是使用了%表示是十六进制.  把上面一段完整解码:

In [80]: a = urllib.unquote('%3D1850%09%2B%25E6%2588%2591%25E6%2588%2591%25E6%2588%2591%25E6%2588%2591%09%3D4')
In [81]: a = binhex.binascii.a2b_hex(a.split('\t')[1][1:].replace('%', ''))
In [82]: print a
-------> print(a)
我我我我



纯把玩. 没有它意.........

No comments:

Post a Comment

Note: Only a member of this blog may post a comment.