Dear Future Me,

You’ve forgotten how to decode (or unescape) HTML or XML in Python again, haven’t you?  My, my, that old age does catch up with you.

Well, it turns out that xml.sax.saxutils.unescape() works like a charm.  I’m certain that edge cases lurk here and there, so caveat, um, coder.

UPDATE: Edge case found. Note that unescape() will not work on ' or ", and so there is:
xml.sax.saxutils.unescape("<p>This is &quot;markup&quot;</p>", {"&apos;": "'", "&quot;": '"'})