获得幂等用户名的规范表示的最佳方法是什么?
我希望避免遇到与Spotify相同的问题:http://labs.spotify.com/2013/06/18/creative-usernames/
我正在寻找一个很好的库来用Python做到这一点。我宁愿不做Spotify最终做的事情(运行规范化两次以测试它是否是幂等的),并且将Twisted导入我的项目有点过分,是否有一个独立的库?
在用户名方面,首选使用电子邮件地址吗?主要网站/公司如何处理这个问题?
答案 0 :(得分:1)
首先,你应该阅读维基百科关于Unicode equivalence的文章。它解释了警告以及规范化方法以规范形式表示Unicode字符串。
然后,您可以使用Python的内置模块unicodedata将Unicode字符串规范化为您首选的规范化表单。
代码示例:
>>> import unicodedata
>>> unicodedata.normalize('NFKC', u'ffñⅨffi⁵KaÅéᴮᴵᴳᴮᴵᴿᴰ')
'ffñIXffi5KaÅéBIGBIRD'
>>> unicodedata.normalize('NFKC', u'ffñⅨffi⁵KaÅéᴮᴵᴳᴮᴵᴿᴰ').lower()
'ffñixffi5kaåébigbird'
答案 1 :(得分:0)
对于几个月后阅读此内容的人:
Spotify使用的模块并不是很难在没有一大堆依赖关系的情况下退出Twisted(Twisted可以完全删除而不费力,它只是为了版本检查而导入)。 zope.interface是唯一留下的依赖,虽然它应该可以通过一点点的努力去除。
该模块的核心是unicodedata.normalize(),所以如果你想推出自己的实现,那就是你应该开始的地方。但就像其他人所说的那样,要小心,这是一个容易被利用的领域。
编辑:我剥离了zope和扭曲的依赖关系:https://gist.github.com/repole/7548478