python - 使用 Python 进行 URL 编码/解码

标签 python url-encoding

我正在尝试在 Python 中对参数进行编码、存储和解码,并在此过程中迷路了。这是我的步骤:

1) 我使用 google 工具包的 gtm_stringByEscapingForURLArgument 正确转换 NSString 以传递到 HTTP 参数。

2) 在我的服务器 (python) 上,我将这些字符串参数存储为类似 u'1234567890-/:;()$&@".,?!\'[]{}#%^*+=_\\|~<>\u20ac\xa3\xa5\u2022.,?!\'' 的东西(请注意,这些是 iphone 键盘上“123” View 和“#+=” View 中的标准键,\u\x 字符,其中有一些货币前缀,如英镑、日元等)

3) 我在该存储值上调用 urllib.quote(myString,''),大概是为了 %-转义它们以传输到客户端,以便客户端可以不百分比地转义它们。

结果是当我尝试记录 % 转义的结果时出现异常。是否有一些我忽略的关键步骤需要应用于\u 和\x 格式的存储值,以便正确转换它以通过 http 发送?

更新:标记为以下答案的建议对我有用。不过,我正在提供一些更新以解决以下评论的完整问题。

我收到的异常引用了 \u20ac 的问题。我不知道这是否是一个问题,而不是它是字符串中的第一个 unicode 字符。

\u20ac 字符是“欧元”符号的 unicode。我基本上发现我会遇到问题,除非我使用 urllib2 quote 方法。

最佳答案

编码“原始” unicode 的 url 并没有真正的意义。你需要做的是首先 .encode("utf8") 所以你有一个已知的字节编码,然后是 .quote()

输出不是很漂亮,但应该是正确的 uri 编码。

>>> s = u'1234567890-/:;()$&@".,?!\'[]{}#%^*+=_\|~<>\u20ac\xa3\xa5\u2022.,?!\''
>>> urllib2.quote(s.encode("utf8"))
'1234567890-/%3A%3B%28%29%24%26%40%22.%2C%3F%21%27%5B%5D%7B%7D%23%25%5E%2A%2B%3D_%5C%7C%7E%3C%3E%E2%82%AC%C2%A3%C2%A5%E2%80%A2.%2C%3F%21%27'

请记住,如果您正在调试或其他任何事情,您将需要同时 unquote()decode() 将其正确打印出来。

>>> print urllib2.unquote(urllib2.quote(s.encode("utf8")))
1234567890-/:;()$&@".,?!'[]{}#%^*+=_\|~<>€£¥•.,?!'
>>> # oops, nasty  means we've got a utf8 byte stream being treated as an ascii stream
>>> print urllib2.unquote(urllib2.quote(s.encode("utf8"))).decode("utf8")
1234567890-/:;()$&@".,?!'[]{}#%^*+=_\|~<>€£¥•.,?!'

事实上,这就是另一个答案中提到的 django functions 的作用。

The functions django.utils.http.urlquote() and django.utils.http.urlquote_plus() are versions of Python’s standard urllib.quote() and urllib.quote_plus() that work with non-ASCII characters. (The data is converted to UTF-8 prior to encoding.)

如果您应用任何进一步的引号或编码以不破坏事物,请小心。

关于python - 使用 Python 进行 URL 编码/解码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3563126/

相关文章:

python - 无法为 Eclipse Indigo 安装 PyDev

python - 查找窗口内控件的句柄

http - URL 编码是/或否?

unicode - 处理网址中的 ą ę 等国家标志? - 你的选择

python - 列表项在列表中的多个项目之间更改

python - 忘记声明变量

python - 如何在pytest中忽略python UserWarning?

javascript - ArcGIS JS API 搜索源 searchFields - 多个字段不起作用

security - 当数据经过 URL 编码时,HTTP GET 的安全性如何?

c# - 为什么 Uri 对于不同的方案表现不同?