2

エンコードされた URI コンポーネントがあります"http://www.yelp.com/biz/carriage-house-caf%25C3%25A9-houston-2""http://www.yelp.com/biz/carriage-house-café-houston-2"以下のように、decodeURIComponent 関数を再帰的に適用することで、これを変換できます。

function recursiveDecodeURIComponent(uriComponent){
        try{
            var decodedURIComponent = decodeURIComponent(uriComponent);
            if(decodedURIComponent == uriComponent){
                return decodedURIComponent;
            }
            return recursiveDecodeURIComponent(decodedURIComponent);
        }catch(e){
            return uriComponent;
        }
    }
    console.log(recursiveDecodeURIComponent("http://www.yelp.com/biz/carriage-house-caf%25C3%25A9-houston-2"))

出力: "http://www.yelp.com/biz/carriage-house-café-houston-2".

私はpythonで同じことをしたいと思います。私は次のことを試しました:

print urllib2.unquote(urllib2.unquote(urllib2.unquote("http://www.yelp.com/biz/carriage-house-caf%25C3%25A9-houston-2").decode("utf-8")))

しかし、私は得http://www.yelp.com/biz/carriage-house-café-houston-2ました。Expected character の代わりに、urllib2.unquote の呼び出し回数に関係なくé取得しました。'é'

私は python2.7.3 を使用しています。

4

1 に答える 1

1

単純なループでうまくいくと思います:

uri = "http://www.yelp.com/biz/carriage-house-caf%25C3%25A9-houston-2"

while True:
    dec = urllib2.unquote(uri)
    if dec == uri:
        break
    uri = dec

uri = uri.decode('utf8')
print '%r' % uri  
# u'http://www.yelp.com/biz/carriage-house-caf\xe9-houston-2'
于 2013-02-05T08:16:24.540 に答える