获得幂等用户名的规范表示的最佳方法是什么?
我想避免遇到与 Spotify 相同的问题:http: //labs.spotify.com/2013/06/18/creative-usernames/
我正在寻找一个好的库来在 Python 中执行此操作。我宁愿不做 Spotify 最终做的事情(运行规范化两次以测试它是否是幂等的),并且将 Twisted 导入我的项目有点矫枉过正,是否有独立的库呢?
当涉及到用户名时,是否会首选使用电子邮件地址?主要网站/公司如何处理这个问题?
获得幂等用户名的规范表示的最佳方法是什么?
我想避免遇到与 Spotify 相同的问题:http: //labs.spotify.com/2013/06/18/creative-usernames/
我正在寻找一个好的库来在 Python 中执行此操作。我宁愿不做 Spotify 最终做的事情(运行规范化两次以测试它是否是幂等的),并且将 Twisted 导入我的项目有点矫枉过正,是否有独立的库呢?
当涉及到用户名时,是否会首选使用电子邮件地址?主要网站/公司如何处理这个问题?
首先你应该阅读维基百科关于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'
对于几个月后阅读本文的任何人:
Spotify 使用的模块在没有大量依赖项的情况下从 Twisted 中提取出来并不难(Twisted 几乎可以毫不费力地完全删除,它只是为了版本检查目的而导入的)。zope.interface 是唯一留下的依赖项,尽管它应该可以通过相当大的努力来移除。
该模块的核心是 unicodedata.normalize(),因此,如果您想推出自己的实现,那么您应该从那里开始。但就像其他人所说的那样,要小心,这是一个容易被利用的领域。
编辑:我去掉了 zope 和扭曲的依赖项:https ://gist.github.com/repole/7548478