首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python中将扩展ASCII转换为HTML实体名称?

如何在Python中将扩展ASCII转换为HTML实体名称?
EN

Stack Overflow用户
提问于 2010-07-23 03:49:59
回答 5查看 1.7K关注 0票数 3

我目前这样做是为了将扩展ascii字符替换为它们的HTML-entity-number等效项:

代码语言:javascript
复制
s.encode('ascii', 'xmlcharrefreplace')

我想要做的是转换成HTML-entity-name的等价物(即©而不是©)。下面这个小程序显示了我正在尝试做的失败的事情。除了查找/替换之外,还有什么方法可以做到这一点吗?

代码语言:javascript
复制
#coding=latin-1

def convertEntities(s):
    return s.encode('ascii', 'xmlcharrefreplace')

ok = 'ascii: !@#$%^&*()<>'
not_ok = u'extended-ascii: ©®°±¼'

ok_expected = ok
not_ok_expected = u'extended-ascii: &copy;&reg;&deg;&plusmn;&frac14;'

ok_2 = convertEntities(ok)
not_ok_2 = convertEntities(not_ok)

if ok_2 == ok_expected:
    print 'ascii worked'
else:
    print 'ascii failed: "%s"' % ok_2

if not_ok_2 == not_ok_expected:
    print 'extended-ascii worked'
else:
    print 'extended-ascii failed: "%s"' % not_ok_2
EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2010-07-23 04:13:41

更新这是我要使用的解决方案,通过一个小的修复来检查entitydefs是否包含我们所拥有的字符的映射。

代码语言:javascript
复制
def convertEntities(s):
    return ''.join([getEntity(c) for c in s])

def getEntity(c):
    ord_c = ord(c)
    if ord_c > 127 and ord_c in htmlentitydefs.codepoint2name:
        return "&%s;" % htmlentitydefs.codepoint2name[ord_c]
    return c
票数 1
EN

Stack Overflow用户

发布于 2010-07-23 04:00:21

编辑

其他人提到了我从未听说过的htmlentitydefs。它将以这种方式与我的代码一起工作:

代码语言:javascript
复制
from htmlentitydefs import entitydefs as symbols

for tag, val in symbols.iteritems():
   mystr = mystr.replace("&{0};".format(tag), val)

这应该是可行的。

票数 2
EN

Stack Overflow用户

发布于 2010-07-23 04:01:50

htmlentitydefs是你想要的吗?

代码语言:javascript
复制
import htmlentitydefs
htmlentitydefs.codepoint2name.get(ord(c),c)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3312810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档