我有一个存储在数据库中的HTML字符串。不幸的是,它包含诸如®之类的字符。我想将这些字符替换为它们的HTML等效项,要么在DB本身中,要么在我的Python / Django代码中使用Find replace。
对如何做到这一点有什么建议吗?
发布于 2010-04-30 16:16:57
您可以使用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)
结果
éáé123456tgreáé@€
123456tgre@
请注意,包含@
是因为它毕竟是一个ASCII码字符。如果您想要剥离特定的子集(如数字和大小写字母),您可以限制查看ASCII table的范围
编辑:在再次阅读您的问题后,也许您需要转义您的HTML代码,以便所有这些字符在呈现后都正确显示。您可以在模板上使用escape
筛选器。
发布于 2017-10-12 15:54:55
在https://stackoverflow.com/a/18430817/5100481上有一个简单得多的答案
要从字符串s
中删除非ASCII码字符,请使用:
s = s.encode('ascii',errors='ignore')
然后使用以下命令将其从字节转换回字符串:
s = s.decode()
所有这些都使用Python 3.6
发布于 2010-04-30 16:41:53
这是我不久前发现的,所以这不是我的作品。我找不到源代码,但这是我代码中的代码片段。
def unicode_escape(unistr):
"""
Tidys up unicode entities into HTML friendly entities
Takes a unicode string as an argument
Returns a unicode string
"""
import htmlentitydefs
escaped = ""
for char in unistr:
if ord(char) in htmlentitydefs.codepoint2name:
name = htmlentitydefs.codepoint2name.get(ord(char))
entity = htmlentitydefs.name2codepoint.get(name)
escaped +="&#" + str(entity)
else:
escaped += char
return escaped
像这样使用它
>>> from zack.utilities import unicode_escape
>>> unicode_escape(u'such as ® I want')
u'such as ® I want'
https://stackoverflow.com/questions/2743070
复制相似问题