3

私のウェブサイトに素敵な (スカンジナビア?) ユーザーがいて、URL で彼のユーザー名を解析できないと不満を漏らしているため、私のウェブサイトの彼のページに結果が表示されません。

ブラウザがリクエストを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 変数は無害です。

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'ユニコードコードポイントのシーケンスとして解釈されてい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チルダとピルクロウ文字から判断すると、おそらくcp1252(またはlatin1別名iso-8859-1)です。

于 2011-03-09T03:31:23.383 に答える