如何使用Python 2.6解析utf-8编码的查询参数
我的网站上有一个可爱的(斯堪的纳维亚?)用户,他们抱怨我的网址有问题,所以我在我的网站上没有给他显示任何结果 我很确定浏览器将请求编码为 我想让玩家字符串变成Görling,而不是转换成GÃrling 我将web.py与Python2.6一起使用,并尝试如下解析URL如何使用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
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