2013-07-21 15 views
5

Idempotent olan bir kullanıcı adının standart bir temsilini almanın en iyi yolu nedir? Python içinde bunu yapmak için iyi bir kitaplığı için arıyorum http://labs.spotify.com/2013/06/18/creative-usernames/Kullanıcı adlarının kanonikasyonu

:

Ben Spotify olarak aynı sorunu önlemek istiyoruz. Spotify'ın bittiğini (idempotent olup olmadığını test etmek için iki kez kanonikleştirmeyi çalıştırmayı) ve projemde Twisted'i içe aktarmanın, bunun için tek başına bir kütüphane olduğunu söylememeyi tercih ederim.

Kullanıcı adları söz konusu olduğunda e-posta adresleri kullanmak yerine tercih edilmeli midir? Büyük siteler/şirketler bununla nasıl baş eder?

+0

olmayan ASCII adını desteklediğini gerekir mi: Ben Zope ve bükülmüş bağımlılıkları dışarı kaldırılır? Eğer cevap evet ise, pes et ve yaptıklarını yap, bu önemli bir sorun değil. Eğer değilse, '' .join (c içinde orig_username.lower() için c string.punctuation + string.ascii_lowercase + string.digits]) 'yazın. – AdamKG

+0

Evet, ascii'yi desteklemem gerekiyor. –

+0

Eh, işte gidiyorsun. Büyük oyuncuların nasıl davrandıklarına gelince ... Bence çoğu zaman bunu yapmazlar. Muhtemelen bu kadar fazla çaba harcayanlar bunu spotify olarak yaptılar. Tek başına bir kütüphane bilmiyorum, ama şimdi, bir spotify makaleden yaklaşımı kullanarak ve sadece ilgili kodu bükülmüş (MIT) kopyalayarak, şimdi açılırsa şaşırmayın. – AdamKG

cevap

1

İlk önce, Wikipedia'nın Unicode equivalence numaralı makalesini okuyun. Uyarıları ve hangi normale dönme yöntemlerini, bir unicode dizesini kanonik biçimde temsil ettiğini açıklar.

Daha sonra, Unicode dizesinin normalleştirmesini tercih ettiğiniz normalleştirme formuna yapmak için Python'un tümleşik modülünü unicodedata kullanabilirsiniz.

Bir kod örneği: bir kaç ay sonra bu okuyan herkes için

>>> import unicodedata 
>>> unicodedata.normalize('NFKC', u'ffñⅨffi⁵KaÅéᴮᴵᴳᴮᴵᴿᴰ') 
'ffñIXffi5KaÅéBIGBIRD' 
>>> unicodedata.normalize('NFKC', u'ffñⅨffi⁵KaÅéᴮᴵᴳᴮᴵᴿᴰ').lower() 
'ffñixffi5kaåébigbird' 
0

:

Spotify sert bağımlılıkları sürü olmadan Twisted çekilme değil tüm bu kullanır modül (Twisted hiç çaba harcamadan tamamen kaldırılabilir, sadece sürüm kontrolü için alınır). zope.interface, geride bırakılan tek bağımlılıktır, ancak iyi bir çaba ile çıkarılabilir olmalıdır.

Bu modülün kalbi unicodedata.normalize() şeklindedir, bu nedenle kendi uygulamanızı dışarıda bırakmak istiyorsanız, başlangıç ​​yapmanız gereken yerdir. Ama diğerleri de söyledikleri gibi, dikkatli olun, bu, kolay sömürülere açık bir alandır.

DÜZENLEME: https://gist.github.com/repole/7548478

İlgili konular