是否有任何独立的解决方案可以将国际 unicode 文本标准化为 Python 中的安全 id 和文件名?
例如将 My International Text: åäö
转为 my-international-text-aao
plone.i18n确实做得很好,但不幸的是它依赖于 zope.security
和 zope.publisher
以及其他一些使其脆弱的依赖包。
最佳答案
你想要做的也被称为“slugify”一个字符串。这是一个可能的解决方案:
import re
from unicodedata import normalize
_punct_re = re.compile(r'[\t !"#$%&\'()*\-/<=>?@\[\\\]^_`{|},.:]+')
def slugify(text, delim=u'-'):
"""Generates an slightly worse ASCII-only slug."""
result = []
for word in _punct_re.split(text.lower()):
word = normalize('NFKD', word).encode('ascii', 'ignore')
if word:
result.append(word)
return unicode(delim.join(result))
用法:
>>> slugify(u'My International Text: åäö')
u'my-international-text-aao'
您还可以更改分隔符:
>>> slugify(u'My International Text: åäö', delim='_')
u'my_international_text_aao'
来源: Generating Slugs
对于 Python 3: pastebin.com/ft7Yb3KS (感谢 @MrPoxipol)。
关于python - 在 Python 中将 unicode 文本规范化为文件名等,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9042515/