1
72vc48 OP s = urllib.unquote(request.form['astr'])
assert type(s) == unicode |
2
sun1991 2016-11-19 16:49:34 +08:00
以下是我在 py2 上的测试结果, 你用的是 py3?
Python 2.7.12 (v2.7.12:d33e0cf91556, Jun 27 2016, 15:19:22) [MSC v.1500 32 bit (Intel)] on win32 Type "copyright", "credits" or "license()" for more information. >>> ss = '%E6%88%91%E4%BB%AC%E5%A4%A7%E5%AE%B6' >>> import urllib >>> s = urllib.unquote(ss) >>> s '\xe6\x88\x91\xe4\xbb\xac\xe5\xa4\xa7\xe5\xae\xb6' >>> s.decode('utf8') u'\u6211\u4eec\u5927\u5bb6' >>> print(s.decode('utf8')) 我们大家 >>> type(s) <type 'str'> >>> |
3
72vc48 OP @sun1991
我用的是 Python 2.7.11 。 我在 shell 里边试验是和你的试验结果一样的,但是到了 flask 的视图函数中,情况就不同了。 urllib.unquote()的结果竟然已经是 unicode |
4
banxi1988 2016-11-19 17:15:40 +08:00
Flask 默认已经使用 utf-8 编码对 请求参数(如 Query 参数) 进行了 utf-8 解码.
并且已经进行了 url_unquote_plus 操作了. 你要测试也是侧重在 Flask 环境下测试解决问题. 在 Python 或 iPython 上直接对原始字符串进行操作.场景不一样. |
5
72vc48 OP 搞定。分享一下。从 request.form 中取得的值,是 unicode 的,作为参数传给 urllib.unquote(), urllib.unquote 就会返回 unicode 类型的字符串。那么只要 request.form['astr'].encode('ascii')一下,再传进去,就能返回 str 类型了(在这里其实是 utf-8 编码)。
|
7
jimzhong 2016-11-19 17:41:42 +08:00
py3 里面好像会自动解码
|