python - 在 Python 中将 unicode 文本规范化为文件名等

标签 python unicode plone normalization unicode-normalization

是否有任何独立的解决方案可以将国际 unicode 文本标准化为 Python 中的安全 id 和文件名?

例如将 My International Text: åäö 转为 my-international-text-aao

plone.i18n确实做得很好,但不幸的是它依赖于 zope.securityzope.publisher 以及其他一些使其脆弱的依赖包。

Some operations that plone.i18n applies

最佳答案

你想要做的也被称为“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/

相关文章:

python - Redis "ResponseError: unknown command ' 50 2'"

python - 单击下拉选项并在 Django 中显示特定字段

python - 以编程方式在 plone 上创建内容类型时,time.time() 是一种安全的方法吗?

plone - 在 Plone 的工作流程状态菜单中禁用 "Advanced ..."

plone - 如何为 Plone 插件配置匿名 UI : EEA Faceted Navigation?

python - 将程序作为字符串传递给 Python 时使用导入和 for 循环

python - 打开 CV 错误无法初始化 raw1394 持续存在于 docker 中

javascript -\u200b(零宽度空格)字符在我的 JS 代码中。哪儿来的呢?

python - 在 Python 中打印 "approval"符号/复选标记 (✓) U+2713

mysql - UTF-8字符有问题;我看到的不是我存储的