4
4

1 回答 1

6

给定一个包含单个字符的 Unicode 字符串:

symbol = u'★'

它可以像这样转换为 HTML 语法:

html = '&#{};'.format(ord(symbol))

要转换回来,通过剥离&#and提取数字;,转换为整数,然后使用chr(Python 3) 或unichr(Python 2)。

如果您需要处理不是来自上述转换的输入,您可能还需要处理十六进制的,这看起来像是一堆十六进制数字&#xZZZ;在哪里。ZZZ要检测这些,只需注意它以x;开头。用基数 16 解析余数。

此外,您可能需要处理命名实体。请参阅最后两段。


如果你想让 Python 处理整个字符串的编码,你可以使用这个:

text = u"I like symb★ls!"
html = text.encode('ascii', errors='xmlcharrefreplace').decode('ascii')

不幸的是,没有解码的等价物,而且这也不会转义具有潜在危险的 HTML 字符,例如<(可能是也可能不是您想要的)。如果您需要解码,也许使用适当的 HTML 解析器,它也能够处理命名实体,如&clubs;(♣)。

如果您想处理命名实体并且不想使用真正的 HTML 解析器,则可以使用机器可读(使用 Pythonjson模块)的实体列表

于 2013-02-05T02:41:55.847 回答