我有一个包含这样符号的字符串:
'
显然这是一个撇号。
我试了saxutils.unescape()没有任何运气,尝试了urllib.unquote()
我该如何解码?谢谢!
答案 0 :(得分:2)
结帐this question。您正在寻找的是“html实体解码”。通常情况下,您会找到一个名为“htmldecode”的函数,它可以执行您想要的操作。 Django和Cheetah都提供了BeautifulSoup等功能。
如果您不想使用库并且所有实体都是数字,那么另一个答案将会很有效。
答案 1 :(得分:2)
试试这个:(找到它here)
from htmlentitydefs import name2codepoint as n2cp
import re
def decode_htmlentities(string):
"""
Decode HTML entities–hex, decimal, or named–in a string
@see http://snippets.dzone.com/posts/show/4569
>>> u = u'E tu vivrai nel terrore - L'aldilà (1981)'
>>> print decode_htmlentities(u).encode('UTF-8')
E tu vivrai nel terrore - L'aldilà (1981)
>>> print decode_htmlentities("l'eau")
l'eau
>>> print decode_htmlentities("foo < bar")
foo < bar
"""
def substitute_entity(match):
ent = match.group(3)
if match.group(1) == "#":
# decoding by number
if match.group(2) == '':
# number is in decimal
return unichr(int(ent))
elif match.group(2) == 'x':
# number is in hex
return unichr(int('0x'+ent, 16))
else:
# they were using a name
cp = n2cp.get(ent)
if cp: return unichr(cp)
else: return match.group()
entity_re = re.compile(r'&(#?)(x?)(\w+);')
return entity_re.subn(substitute_entity, string)[0]
答案 2 :(得分:1)
最强大的解决方案似乎是Python杰出人物Fredrik Lundh的this function。它不是最短的解决方案,但它处理命名实体以及十六进制和十进制代码。