介绍
Unicode 是世界上大多数计算机的标准字符编码。它确保文本(包括字母、符号、表情符号,甚至控制字符)在不同设备、平台和数字文档中显示一致,无论使用的操作系统或软件是什么。它是互联网和计算机行业的重要组成部分,没有它,互联网将会更加混乱和难以使用。
Unicode 本身不是编码,而更像是地球上几乎所有可能字符的数据库。Unicode 包含一个代码点,用于标识其数据库中的每个字符,其值范围从 0 到 110 万,这意味着它很可能不会很快用尽这些独特的代码点。Unicode 中的每个代码点都表示为 U+n
,其中 U+
表示它是一个 Unicode 代码点,n
是字符的四到六个十六进制数字集。它比 ASCII 更强大,ASCII 只表示 128 个字符。使用 ASCII 在全球范围内交换数字文本是困难的,因为它基于美国英语,不支持重音字符。另一方面,Unicode 包含几乎 15 万个字符,涵盖了地球上每种语言的字符。
随之而来的是对编程语言(如 Python)的要求,以正确处理文本,并使软件能够实现国际化。Python 可以用于各种用途——从电子邮件到服务器再到网络——并且具有一种优雅的处理 Unicode 的方式,即通过采用 Unicode 标准来处理其字符串。
然而,在 Python 中处理 Unicode 可能会令人困惑并导致错误。本教程将介绍如何在 Python 中使用 Unicode 的基础知识,以帮助您避免这些问题。您将使用 Python 解释 Unicode,使用 Python 的规范化函数对数据进行规范化,并处理 Python Unicode 错误。
先决条件
要按照本教程操作,您需要:
- 本地安装或远程服务器上安装的 Python。如果您尚未设置 Python,可以按照我们的教程《如何安装 Python 3 并设置编程环境》进行设置。选择适合您的 Linux 发行版的版本。
- 熟悉基本的 Python 编程和 Python 的字符串方法
- 知道如何使用 Python 交互式控制台
步骤 1 —— 在 Python 中转换 Unicode 代码点
编码是将数据表示为计算机可读形式的过程。有许多编码数据的方法——ASCII、Latin-1 等——每种编码都有其优势和劣势,但也许最常见的是 UTF-8。这是一种编码类型,允许来自世界各地的字符在单个字符集中表示。因此,UTF-8 对于任何处理国际化数据的人来说都是一种必不可少的工具。总的来说,UTF-8 对于大多数目的来说都是一个不错的选择。它相对高效,并且可以与各种软件一起使用。UTF-8 将 Unicode 代码点转换为计算机可以理解的十六进制字节。换句话说,Unicode 是映射,而 UTF-8 使计算机能够理解该映射。
在 Python 3 中,默认的字符串编码是 UTF-8,这意味着 Python 字符串中的任何 Unicode 代码点都会自动转换为相应的字符。
在这一步中,您将使用 Python 中的 Unicode 代码点创建版权符号(©)。首先,在终端中启动 Python 交互式控制台,然后输入以下内容:
>>> s = '\u00A9'
>>> s
在上述代码中,您创建了一个带有 Unicode 代码点 \u00A9
的字符串 s
。如前所述,由于 Python 字符串默认使用 UTF-8 编码,打印 s
的值会自动将其更改为相应的 Unicode 符号。请注意,代码点前面的 \u
是必需的。没有它,Python 将无法转换代码点。上述代码的输出将返回相应的 Unicode 符号:
'©'
Python 编程语言提供了用于编码和解码字符串的内置函数。encode()
函数将字符串转换为字节字符串。
为了演示这一点,打开 Python 交互式控制台,然后输入以下代码:
>>> '🅥'.encode('utf-8')
这将产生字符的字节字符串作为输出:
b'\xf0\x9f\x85\xa5'
请注意,每个字节前面都有 \x
,表示它是一个十六进制数。
接下来,您将使用 decode()
函数将字节字符串转换回字符串。decode()
函数接受编码类型作为参数。值得一提的是,decode()
函数只能解码字节字符串,这是通过在字符串开头使用字母 b
来指定的。去除 b
将导致 AttributeError
。
在您的控制台中输入:
>>> b'\xf0\x9f\x85\xa5'.decode('utf-8')
该代码将返回如下输出:
'🅥'
现在,您对 Python 中的 Unicode 解释有了基本的了解。接下来,您将深入了解 Python 内置的 unicodedata
模块,以在字符串上执行高级的 Unicode 技术。
步骤 2 —— 在 Python 中对 Unicode 进行规范化
在这一步中,你将学习如何在 Python 中对 Unicode 进行规范化。规范化有助于确定不同字体中的两个字符是否相同,这在两个具有不同代码点但产生相同结果的字符时非常有用。例如,Unicode 字符 R
和 ℜ
在人眼中是相同的,因为它们都是字母 R
,但计算机认为它们是不同的字符。
下面的代码示例进一步说明了这一点。打开你的 Python 控制台,输入以下内容:
>>> styled_R = 'ℜ'
>>> normal_R = 'R'
>>> styled_R <