跳转到主要内容

命名(和数字)HTML实体相互转换或转换为Unicode

项目描述

travisci PyPI Package latest release Supported versions Supported implementations Wheel packaging support Test line coverage Test branch coverage

在阅读HTML时,命名实体比数字实体(无论是十进制还是十六进制表示)更整洁,也更易于理解,比Unicode字符或混合表示形式更简单。例如,⊕字符比⊕⊕⊕\u2295更容易识别和记忆。它也比其冗长的Unicode描述符CIRCLED PLUS更紧凑。

因为它们仅使用纯7位ASCII字符,实体在数据库、文件、电子邮件和其他环境中使用更安全,尤其是在考虑到为了适应字节存储而需要的多种编码(如UTF-8)以及沿途中遇到的许多平台差异和怪癖。

此模块可以帮助将您拥有的任何字符和/或实体的混合转换为命名HTML实体。或者,如果您愿意,可以转换为数值HTML实体(十进制或十六进制)。它甚至可以帮助您反向转换,将实体映射到Unicode。

用法

Python 2

from __future__ import print_function # Python 2/3 compatibiltiy
from namedentities import *

u = u'both em\u2014and–dashes…'

print("named:  ", repr(named_entities(u)))
print("numeric:", repr(numeric_entities(u)))
print("hex:"   ", repr(hex_entities(u)))
print("unicode:", repr(unicode_entities(u)))

生成

named:   'both em—and–dashes…'
numeric: 'both em—and–dashes…'
hex:     'both em—and–dashes…'
unicode: u'both em\u2014and\u2013dashes\u2026'

在Python 3中,您可以做几乎相同的事情,但您必须使用 print 函数而不是 print 语句,并且在3.3版本之前,您必须跳过在Python 2中标记字符串字面量为Unicode字面量的 u 前缀。然而,从Python 3.3及以后版本开始,如果您愿意,可以再次使用 u 标记。虽然所有Python 3字符串都是Unicode,但这有助于跨版本代码兼容性。(您可以使用 six 跨版本兼容性库,就像测试中所做的那样。)

unicode_entities 的一个很好的用途是创建跨平台、跨Python版本的字符串,这些字符串在概念上包含Unicode字符,但以命名(或数值)HTML实体的形式表示。例如

unicode_entities('This ’thing” is great!')

这的优点是仅使用ASCII字符和常见的字符串编码机制,但在重新组合后渲染完整的Unicode字符串。您可以使用其他函数,例如 named_entities(),将Unicode字符转换为命名实体。

其他API

entities(text, kind) 接受文本和您希望返回的实体类型。 kind 可以是 'named'(默认值),'numeric'(即 'decimal'),'hex''unicode''none'(或实际的 None)。它是与如 named_entities 这样的更明确单个函数的替代方案,当需要数据驱动生成的实体类型时非常有用。

unescape(text) 将所有实体(除了HTML和XML语法的标记 <>&)转换为Unicode字符。它有一个近似别名,unicode_entities(text),与其他API并行。

编码选择

此模块帮助在HTML实体(命名、数值或十六进制)和Unicode字符之间映射字符串。这使得那些映射变得容易——以前相对模糊和繁琐。太棒了!然而,它不会特别帮助您处理Unicode字符的“编码”如UTF-8;对于这些,请使用Python的内置功能。

Python 3倾向于处理编码/解码相当透明。然而,Python 2并不这样做。使用字符串的 decode 方法将包括UTF-8在内的(字节)字符串转换为Unicode;使用 encode 将真正的 unicode 字符串转换为UTF-8。请在使用 namedentities 处理之前将它们转换为Unicode。

s = "String with some UTF-8 characters..."
print(named_entities(s.decode("utf-8")))

最佳策略是在摄入数据后尽快将数据转换为完整的Unicode。在Unicode中统一处理所有内容。然后,在将数据写出去时将其编码回UTF-8等。此策略在Python 3中是固有的,但在Python 2中必须手动完成。

转义

本模块的主要功能是将文本字符串中使用的字符实体转换为更方便的编码。这个功能与“转义”关键字符(如&<>,以及可能的引号如'")的作用不同,这些字符在HTML和XML中具有特殊含义。尽管如此,这些任务有重叠。它们都涉及使用实体表示法转换字符串,当你想要做其中一项时,通常需要同时做两项。namedentities因此提供了一个方便的机制。

此模块的任何函数都接受一个可选的escape关键字参数。如果设置为True,则字符串将使用Python标准库中的html.escape进行预处理,将&<>分别替换为&amp;&lt;&gt;。默认情况下,引号不会被转义。

如果你提供一个函数而不是True,该函数将被用作转义转换。例如:

import html hex_entities(‘…’,escape=html.escape)

这将转义所有HTML相关的字符,包括引号。

注意

  • 版本1.9.4实现了100%的分支测试覆盖率。

  • 版本1.9增加了方便的HTML转义。

  • 版本1.8.1开始自动测试分支覆盖率,达到96%覆盖率。

  • 版本1.8实现了100%的测试行覆盖率。

  • 有关更多历史变更,请参阅CHANGES.yml

  • 为了避免干扰HTML转义,不尝试将&lt;&gt;&amp;(或它们的数字等效项)进行编码。

  • 使用精彩的pytestpytest-covcoveragetox管理自动化多版本测试。使用Travis-CI进行持续集成测试。使用pyroma进行打包规范检查。

    成功打包并针对Python的所有最新版本进行测试:2.6、2.7、3.2、3.3、3.4、3.5、3.6、3.7预发布版以及PyPy和PyPy3的最新版本。

  • 此模块最初基本上是Ian Beck的配方的打包。虽然自那时以来已有所发展,但Ian对核心的贡献仍然至关重要。感谢,Ian!

  • 作者Jonathan Eunice@jeunice在Twitter上欢迎您的评论和建议。

安装

要安装或升级到最新版本

pip install -U namedentities

您可能需要使用sudo前缀来授权安装。在不具有超级用户权限的环境中,您可能想使用pip--user选项,只为单个用户安装,而不是系统范围内。根据您的本地系统配置和所需的Python版本,您可能还需要使用特定版本的pip2pip3安装程序。

测试

要运行模块测试,请使用以下命令之一

tox                # normal run - speed optimized
tox -e py36        # run for a specific version only (e.g. py27, py36)
tox -c toxcov.ini  # run full coverage tests

项目详情


下载文件

下载适合您平台的文件。如果您不确定该选择哪一个,请了解有关安装包的更多信息。

源分布

namedentities-1.9.4.zip (21.8 kB 查看哈希值)

上传于

构建分布

namedentities-1.9.4-py2.py3-none-any.whl (12.7 kB 查看哈希值)

上传于 Python 2 Python 3

由...