如何用他们的代码替换“★✿•”?

时间:2013-02-05 02:20:00

标签: python encoding character-encoding html-parsing

我正在使用python上的一些web解析器,现在堆叠了特殊符号,如★ ✿ •和其他符号,有时我会在utf-8中获取它们:"✿",有时使用unicode:{{ 1}}。我找到了table of them,但我唯一能做的就是:

u"\xe2\x80\xa2"

我用双手写下来。

因为我找不到与左边相关联的表格。

请帮帮我吗?

1 个答案:

答案 0 :(得分:6)

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

symbol = u'★'

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

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

要转换回去,请通过剥离&#;,转换为整数,然后使用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解析器,那么机器可读(使用Python的json模块)list of entities