gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 20:34:19 39 4
gpt4 key购买 nike

我正在尝试在 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/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com