如何在Python 3.1的string中使用HTML实体?

我看了四周,只发现了python 2.6及更早版本的解决scheme,没有关于如何在python 3.X中做到这一点。 (我只能访问Win7的盒子。)

我必须能够在3.1中做到这一点,最好没有外部库。 目前,我已经安装了httplib2并访问命令提示curl(这就是我得到页面的源代码)。 不幸的是,curl不能解码html实体,据我所知,我找不到在文档中解码它的命令。

是的,我试图让美丽的汤来工作,很多时候在3.X没有成功。 如果你可以在MS Windows环境下提供有关如何使用python 3的EXPLICIT指令,我将不胜感激。

所以,要清楚,我需要把这样的string变成: Suzy & John Suzy & John成这样的string:“Suzy&John”。

你可以使用函数html.unescape :

Python3.4 +中 (感谢JF Sebastian的更新):

 import html html.unescape('Suzy & John') # 'Suzy & John' html.unescape('"') # '"' 

Python3.3或更旧版本中:

 import html.parser html.parser.HTMLParser().unescape('Suzy & John') 

Python2中

 import HTMLParser HTMLParser.HTMLParser().unescape('Suzy & John') 

您可以使用xml.sax.saxutils.unescape来达到此目的。 该模块包含在Python标准库中,并且可以在Python 2.x和Python 3.x之间移植。

 >>> import xml.sax.saxutils as saxutils >>> saxutils.unescape("Suzy & John") 'Suzy & John' 

显然我没有足够的声誉去做任何事情,只是发布这个。 unutbu的答案并不能避免引用。 我发现的唯一的事情就是这个function

导入重新
从htmlentitydefs导入name2codepoint作为n2cp

 def decodeHtmlentities(string):
     def substitute_entity(match):        
         ent = match.group(2)
        如果match.group(1)==“#”:
            返回unichr(int(ent))
        其他:
             cp = n2cp.get(ent)
            如果cp:
                返回unichr(cp)
            其他:
                返回match.group()
     entity_re = re.compile(“&(#?)(\ d {1,5} | \ w {1,8});”)
    返回entity_re.subn(substitute_entity,string)[0]

我从这个页面得到的。

Python 3.x也有html.entities

在我的情况下,我有一个htmlstring在as3转义函数中转义。 经过一个小时的谷歌search没有发现任何有用的东西,所以我写了recusrive函数来满足我的需求。 这里是,

 def unescape(string): index = string.find("%") if index == -1: return string else: #if it is escaped unicode character do different decoding if string[index+1:index+2] == 'u': replace_with = ("\\"+string[index+1:index+6]).decode('unicode_escape') string = string.replace(string[index:index+6],replace_with) else: replace_with = string[index+1:index+3].decode('hex') string = string.replace(string[index:index+3],replace_with) return unescape(string) 

编辑1增加了处理unicode字符的function。

我不确定这是不是内置的库,但它看起来像你需要和支持3.1。

来自: http : //docs.python.org/3.1/library/xml.sax.utils.html?highlight=html%20unescape

xml.sax.saxutils.unescape(data,entities = {})Unescape'&','<'和'>'在一串数据中。

雅各