如何使用Python 2.6解析utf-8编码的查询参数

如何使用Python 2.6解析utf-8编码的查询参数,python,web.py,utf8-decode,urlparse,Python,Web.py,Utf8 Decode,Urlparse,我的网站上有一个可爱的(斯堪的纳维亚?)用户,他们抱怨我的网址有问题,所以我在我的网站上没有给他显示任何结果 我很确定浏览器将请求编码为 我想让玩家字符串变成Görling,而不是转换成GÃrling 我将web.py与Python2.6一起使用,并尝试如下解析URL parsed_url = urlparse.urlparse(web.ctx.fullpath) query_dict = dict(urlparse.parse_qsl(parsed_url.query)) target_pl

我的网站上有一个可爱的(斯堪的纳维亚?)用户,他们抱怨我的网址有问题,所以我在我的网站上没有给他显示任何结果

我很确定浏览器将请求编码为

我想让玩家字符串变成Görling,而不是转换成GÃrling

我将web.py与Python2.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_字符串变量没有受到干扰

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')


PS.不知何故,
str
对象
'G\xc3\xb6rling'
中的字节被解释为一系列unicode代码点,其效果是将
Görling
转换为
GÃrling

In [3]: print(u'G\xc3\xb6rling')
Görling

请清楚地告诉我们你有什么。。。显示repr(target\u player)返回的值。


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

谢谢,我认为问题在于web.ctx.fullpath变量填充不正确,以更原始的数据结构返回源数据(如您的示例所示)是有效的。
In [3]: print(u'G\xc3\xb6rling')
Görling