2010-12-07 15 views
4

Djangoのドキュメントには、URLにASCII以外のデータが含まれている文字列を処理するための[すばらしいセクション]があります。特に、それはURLで使用するUnicode文字列を変換する方法については、次の例を示します:DjangoでのIRIの処理

>>> urlquote(u'Paris & Orléans') 
u'Paris%20%26%20Orl%C3%A9ans' 
>>> iri_to_uri(u'/favorites/François/%s' % urlquote(u'Paris & Orléans')) 
'/favorites/Fran%C3%A7ois/Paris%20%26%20Orl%C3%A9ans' 

しかし、逆変換を実行する方法の兆候はなさそうです!

どのように私は/favorites/François/Paris & Orléansにその背中をマッピングしない、私のアプリケーションは、URL /favorites/Fran%C3%A7ois/Paris%20%26%20Orl%C3%A9ansを受けると仮定すると?

django.utils.encoding.iri_to_uriを補完する機能はありません。補完するにはdjango.utils.http.urlunquoteがありません。django.utils.http.urlquote()

:これがすべてで助けている場合

、私は

  • 上のPython 2.5をDjangoの1.2を使用している、DebianのLinux 32ビット
  • のPython 2.6、Windows 7の64ビット版。
  • 標準 urllib.unquote()は、このケースではうまく動作するはず

答えて

3

urllib.unquoteがあなたのためにこれを行いますので、

>>> urllib.unquote('/favorites/Fran%C3%A7ois/Paris%20%26%20Orl%C3%A9ans') 
'/favorites/Fran\xc3\xa7ois/Paris & Orl\xc3\xa9ans' 
+0

おっと、それは奇妙です! 'urllib.quote()'はUnicodeデータを扱いませんが、 'urllib.unquote'はUTF-8をうまく処理します!できます! –

+0

'urllib.unquote()'はバイト文字列を返します。UTF-8からデコードするのはあなた次第です。 UTF-8に最初にUnicode文字列をエンコードした場合、 'urllib.quote()'はバイト文字列も期待しています。 –

+0

例: 'urllib.quote(u'ąčę.encode( 'utf8'))=> '%C3%A0%C3%A8%C3%A6'' –

1

です:

>>> import urllib 
>>> print urllib.unquote('/favorites/Fran%C3%A7ois/Paris%20%26%20Orl%C3%A9ans') 
/favorites/François/Paris & Orléans 
関連する問題