gpt4 book ai didi

python - 如何在 GAE(python)中解码 encodeURIComponent?

转载 作者:太空狗 更新时间:2023-10-29 18:30:52 29 4
gpt4 key购买 nike

我有一个在客户端使用 JS encodeURIComponent 编码的 unicode 字符串。

如果我在本地使用 Python 中的以下代码,我会得到预期的结果:

>>> urllib.unquote("Foo%E2%84%A2%20Bar").decode("utf-8")
>>> u'Foo\u2122 Bar'

但是当我在 Google App Engine 中运行它时,我得到:

Traceback (most recent call last):
File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/_webapp25.py", line 703, in __call__
handler.post(*groups)
File "/base/data/home/apps/s~kaon-log/2.357769827131038147/main.py", line 143, in post
path_uni = urllib.unquote(h.path).decode('utf-8')
File "/base/python_runtime/python_dist/lib/python2.5/encodings/utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeEncodeError: 'ascii' codec can't encode characters in position 3-5: ordinal not in range(128)

我仍在使用 Python 2.5,以防有所不同。我错过了什么?

最佳答案

我的猜测是 h.path 是一个 unicode 对象。然后 urllib.unquote 将返回一个 unicode 对象。当 decode 首先在 unicode 对象上调用时,它会使用默认编码(即 ascii)转换为 str,在这里你可以得到 'ascii' 编解码器'编码异常。

证明如下:

>>> urllib.unquote(u"Foo%E2%84%A2%20Bar").decode("utf-8")
...
UnicodeEncodeError: 'ascii' codec can't encode characters in position 3-5: ordinal not in range(128)

这应该有效:

urllib.unquote(h.path.encode('utf-8')).decode("utf-8")

有一个 stackoverflow 线程解释了为什么 unicode 不能与 urllib.unquote 一起工作:How to unquote a urlencoded unicode string in python?

关于python - 如何在 GAE(python)中解码 encodeURIComponent?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9880173/

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