Jos*_*ith 11 python unicode google-app-engine uri character-encoding
我有一个使用JS encodeURIComponent在客户端编码的unicode字符串.
如果我在本地使用Python中的以下内容,我会得到预期的结果:
>>> urllib.unquote("Foo%E2%84%A2%20Bar").decode("utf-8")
>>> u'Foo\u2122 Bar'
Run Code Online (Sandbox Code Playgroud)
但是当我在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)
Run Code Online (Sandbox Code Playgroud)
我仍在使用Python 2.5,以防万一.我错过了什么?
我的猜测是这h.path是一个unicode对象.然后urllib.unquote会返回一个unicode对象.当decode最初被称为unicode的对象将转换为str使用默认编码(这是ASCII),在这里你会得到'ascii' codec can't encode例外.
这是一个证据:
>>> 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)
Run Code Online (Sandbox Code Playgroud)
这应该工作:
urllib.unquote(h.path.encode('utf-8')).decode("utf-8")
Run Code Online (Sandbox Code Playgroud)
有一个stackoverflow线程解释了为什么unicode无法使用urllib.unquote:如何在python中取消引用urlencoded unicode字符串?
| 归档时间: |
|
| 查看次数: |
5538 次 |
| 最近记录: |