3

我的网站上有一些可爱的(斯堪的纳维亚人?)用户抱怨我无法在 URL 中解析他的用户名,因此我在我的网站上的页面上没有向他显示任何结果。

我很确定浏览器将请求编码为 http://councilroom.com/player?player=G%C3%B6rling

我想让播放器字符串成为 Görling 而不是被转换为的 Görling。

我正在将 web.py 与 python 2.6 一起使用,并尝试按如下方式解析 URL

parsed_url = urlparse.urlparse(web.ctx.fullpath)
query_dict = dict(urlparse.parse_qsl(parsed_url.query))
target_player = query_dict['player']

编辑:在 unutbu 的帮助下,我将其更改为

query_dict = dict(urlparse.parse_qsl(web.ctx.env['QUERY_STRING']))
target_player = query_dict['player'].decode('utf-8')

我认为 webpy 以某种方式错误地解析了 web.ctx 中的完整路径,但 QUERY_STRING 变量没有受到干扰。

4

2 回答 2

0
In [4]: import urlparse

In [6]: parsed_url = urlparse.urlparse('http://councilroom.com/player?player=G%C3%B6rling')

In [7]: parsed_url
Out[7]: ParseResult(scheme='http', netloc='councilroom.com', path='/player', params='', query='player=G%C3%B6rling', fragment='')

In [8]: query_dict = dict(urlparse.parse_qsl(parsed_url.query))

In [9]: query_dict
Out[9]: {'player': 'G\xc3\xb6rling'}

注意.decode('utf-8')

In [10]: target_player = query_dict['player'].decode('utf-8')

In [11]: target_player
Out[11]: u'G\xf6rling'

In [12]: print(target_player)
Görling

PS。str不知何故,对象中的字节'G\xc3\xb6rling'被解释为一系列 unicode 代码点,效果Görling变成Görling

In [3]: print(u'G\xc3\xb6rling')
Görling
于 2011-03-09T03:26:43.230 回答
0

请明确地告诉我们你得到了什么......告诉我们返回的值repr(target_player)

如果值为'G\xc3\xb6rling',则表示播放器正确名称的 UTF-8 编码版本。要获得 unicode,您需要对其进行解码。然后你需要考虑使用什么编码来显示它......根据你显示的 A-波浪号和 pilcrow 字符判断,它可能是 cp1252(或 latin1 aka iso-8859-1)。

于 2011-03-09T03:31:23.383 回答