使用python/django从字符串中删除非ASCII字符

Gau*_*rma 16 python regex django unicode replace

我有一个存储在数据库中的HTML字符串.不幸的是它包含诸如®之类的字符我希望用它们的HTML等效替换这些字符,无论是在DB本身还是在我的Python/Django代码中使用Find Replace.

有关如何做到这一点的任何建议?

Khe*_*ben 20

您可以使用ASCII字符是前128个字符,因此请获取每个字符的编号,ord如果超出范围则将其删除

# -*- coding: utf-8 -*-

def strip_non_ascii(string):
    ''' Returns the string without non ASCII characters'''
    stripped = (c for c in string if 0 < ord(c) < 127)
    return ''.join(stripped)


test = u'éáé123456tgreáé@€'
print test
print strip_non_ascii(test)
Run Code Online (Sandbox Code Playgroud)

结果

éáé123456tgreáé@€
123456tgre@
Run Code Online (Sandbox Code Playgroud)

请注意,这@是因为,毕竟它是一个ASCII字符.如果要剥离特定子集(例如只是数字和大写和小写字母),可以限制查看ASCII表的范围

编辑:再次阅读您的问题后,您可能需要转义HTML代码,因此所有这些字符在呈现后都会正确显示.您可以escape在模板上使用过滤器.


som*_*ude 6

/sf/answers/1290157221/ 上有一个更简单的答案

要从字符串中删除非 ASCII 字符s,请使用:

s = s.encode('ascii',errors='ignore')

然后使用以下方法将其从字节转换回字符串:

s = s.decode()

这一切都使用 Python 3.6