如何使用HTML实体将Unicode编码转换为ASCII

4
我可以帮您将一个Unicode UTF-8字符串转换成带有HTML实体的ASCII码,使用Python进行操作。
具体来说:

我需要明确一下:

source = u"Hello…"
wanted = "Hello…"

这不是解决方案:

as_ascii = source.encode('ascii', 'xmlcharrefreplace')

因为 as_ascii 将被设置为 Hello… - 即使用 XML 字符引用而不是 HTML 字符引用。
是否有 Python 模块/函数/实体字典可以执行以下操作之一:
  1. 将 Unicode 解码为带有 HTML 字符引用的 ASCII。
  2. 替换具有 XML 字符引用的 ASCII 字符串为适当的 HTML 字符引用。

1
对于实体字典,htmlentitydefs.codepoint2name 对于第二种方法有帮助吗? htmlentitydefs.codepoint2name[8230] == "hellip" - DSM
是的!谢谢。我可以使用htmlentitydefs工作! - Jonathan Vanasco
我不得不从htmlentitydefs包中提取出一些元素,但我想出了这个 - https://gist.github.com/jvanasco/7030697 - Jonathan Vanasco
数字字符引用在HTML中和XML一样有效,您可能需要它们来表示所有没有HTML特定实体的字符。 - bobince
是的,我知道它们在呈现时是等效的。我特别想要HTML实体。 - Jonathan Vanasco
1个回答

2

示例过程(文件decode_to_entity.py):

#-*- coding: utf-8 -*-

import htmlentitydefs as entity

def decode_to_entity(s):
        t = ""
        for i in s:
                if ord(i) in entity.codepoint2name:
                        name = entity.codepoint2name.get(ord(i))
                        t += "&" + name + ";"
                else:
                        t += i
        return t



print(decode_to_entity(u"Hello…"))

一个示例执行:

$ python decode_to_entity.py
Hello…

哇,这在我的Unicode字符串上运行了,但我不明白它为什么可行。我有日本文本,并且“xmlcharrefreplace”也适用于Web显示,但担心从Web输入的内容将不会被存储为正确的UTF8编码。如何反转此过程以将Web输出文本存储为UTF8编码的数据库中呢? - Marc Maxmeister
1
因为ord返回字符的整数值(可能大于255)。看这个:a=u'Ś' 这是 u'\u015a',而十六进制的15a在十进制格式(人类可读)中是346(ord(a)将返回346)。您可以在此处阅读更多信息:http://docs.python.org/2/howto/unicode.html#unicode-literals-in-python-source-code - WBAR

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接