我的网站上有一些可爱的(斯堪的纳维亚?)用户在网址中抱怨I cannot parse his username,因此我在他的网页上没有显示他的结果。
我很确定浏览器将请求编码为 http://councilroom.com/player?player=G%C3%B6rling
我想让玩家字符串成为Görling,而不是转换为Görling。
我正在使用带有python 2.6的web.py并尝试按如下方式解析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变量是不受干扰的。
答案 0 :(得分: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
答案 1 :(得分:0)
请明确告诉我们你有什么......告诉我们repr(target_player)
返回的价值。
如果值为'G\xc3\xb6rling'
,则为播放器正确名称的UTF-8编码版本。要获得unicode,您需要对其进行解码。然后你需要考虑使用什么编码来显示它......根据你展示的A-tilde和pilcrow字符判断,它可能是cp1252(或latin1又名iso-8859-1)。