问问题
405 次
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 解析器,它也能够处理命名实体,如♣
(♣)。
如果您想处理命名实体并且不想使用真正的 HTML 解析器,则可以使用机器可读(使用 Pythonjson
模块)的实体列表。
于 2013-02-05T02:41:55.847 回答