SORU
25 AĞUSTOS 2010, ÇARŞAMBA


URL kodlama/Python ile kod çözme

Kodlamak ve saklamak, ve Python değişkenleri çözmek ve kaybolmadan bir yerde yol boyunca çalışıyorum. Burada benim adım:

1) google Araç gtm_stringByEscapingForURLArgument bir NSString düzgün HTTP tartışmalar içine geçen dönüştürmek için kullanıyorum.

2) benim sunucu (python), deposu bu dize bağımsız değişken olarak bir şey gibi u'1234567890-/:;()$&@".,?!\'[]{}#%^* =_\\|~<>\u20ac\xa3\xa5\u2022.,?!\'' (not bu standart tuşlar üzerinde bir iphone tuş takımı "123" görünüm ve "# =" görüntülemek \u \x karakter orada olmak biraz para önekleri gibi sterlin, yen, vb)

3) istemci unpercent onları kaçış urllib.quote(myString,'') istemci-kaçış %taşıma için onlara saklı değer, muhtemelen diyorum.

Sonuç % sonucu oturum açmaya çalıştığınızda, bir özel durum kaçış alıyorum. Düzgün http gönderdiğin için dönüştürmek için \u ve \x biçim ile saklı değer için uygulanması gereken bakan olduğum önemli bir adım var mı?

Güncelleme: Öneri cevabı aşağıda benim için çalıştı olarak işaretlenmiş. Bazı güncellemeler aşağıdaki yorum adresi tam olmanı sağlayan benim.

Aldığım özel durum \u20ac ile bir sorunu işaret etti. Eğer özel bir sorun, çok dize ilk unicode karakter vardı ortada olduğunu bilmiyorum.

\u20ac char için unicode 'euro' sembolü. Ben temelde urllib2 quote yöntemi kullandım sürece ile ilgili sorunum buldu.

CEVAP
25 AĞUSTOS 2010, ÇARŞAMBA


url kodlama "ham" unicode gerçekten mantıklı değil. Yapman gereken şey bilinen bir bayt ve sonra .quote() kodlama var ve bu yüzden .encode("utf8") ilk.

Çıktı çok güzel değil ama doğru bir urı kodlama olmalıdır.

>>> s = u'1234567890-/:;()$&@".,?!\'[]{}#%^* =_\|~<>\u20ac\xa3\xa5\u2022.,?!\''
>>> urllib2.quote(s.encode("utf8"))
'1234567890-/:;()$&@".,?!'[]{}#%^*+=_\|~<>€£¥•.,?!''

Eğer hata ayıklama iseniz unquote() decode() Her ikisi de, ama düzgün yazdırmak için buna ihtiyacın olacak ya da her neyse unutmayın.

>>> print urllib2.unquote(urllib2.quote(s.encode("utf8")))
1234567890-/:;()$&@".,?!'[]{}#%^* =_\|~<>€£¥•.,?!'
>>> # oops, nasty  means we've got a utf8 byte stream being treated as an ascii stream
>>> print urllib2.unquote(urllib2.quote(s.encode("utf8"))).decode("utf8")
1234567890-/:;()$&@".,?!'[]{}#%^* =_\|~<>€£¥•.,?!'

Bu django functions başka bir cevap söz ne, aslında,.

Fonksiyonları django.formundadır.http.() urlquote ve django.formundadır.http.() urlquote_plus vardır Python sürümleri standart. urllib.() alıntı ve urllib.()quote_plus bu non-ASCII karakterler ile çalışmak. (Veri UTF-8 öncesinde dönüştürülür kodlama için.)

Herhangi bir tırnak ya da kodlamalar şeyler kırmaya değil başvuru yapıyorsanız dikkatli olun.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Glyn Dewis

    Glyn Dewis

    25 AĞUSTOS 2007
  • iMasterful

    iMasterful

    11 EYLÜL 2009
  • TomKNJ

    TomKNJ

    26 ŞUBAT 2007