1. 介绍
Unicode是计算机科学中一种字符集,它将所有的字符编码成数字。在Python 3中,字符串默认采用Unicode编码,并支持大多数字符集中的字符。Python提供了多种方式来表达Unicode字符,并且对于不同的编码方式也有不同的解析和编码方式。本文将介绍 Unicode 编码、如何匹配 Unicode 字符,以及如何在 Python 中使用 Unicode 字符。
2. Unicode 编码和字符的组成
2.1 Unicode 编码
Unicode 将所有的字符映射为数字,这样就可以使用数字来表示字符,从而解决了字符集和编码问题。在 Python 中,字符串默认采用 Unicode 编码。
Unicode 编码用两个字节表示一个字符,范围从 U+0000
到 U+FFFF
。Python 使用 16 进制编码表示 Unicode 字符,以 \\u
开头,例如:\u0041
(字母 A )和 \u4E2D
(中文“中”)。
2.2 Unicode 字符的组成
Unicode 字符在表示时可以由多个字节组成,由 1 个到 4 个字节不等,每个字节的最高位为 1,后面 7 位用于表示字符的值。因此,Unicode 是可变长编码。
Unicode 字符的范围分为 17 个平面,每个平面可以表示 216 个字符,从 U+0000
到 U+10FFFF
,其中第 0 平面用于表示 BMP(Basic Multilingual Plane),即基本多文种平面,其它 16 个平面用于扩展。
3. 匹配 Unicode 字符
在 Python 中,可以使用正则表达式来匹配 Unicode 字符。
3.1 使用 [\uxxxx] 匹配 Unicode 字符
可以使用 [\uxxxx]
匹配一个 Unicode 字符,其中 "xxxx" 是 Unicode 字符的 16 进制编码。
例如,以下正则表达式匹配 Unicode 编码为 \u4E2D
的字符:
import re
string = '中文'
pattern = r'[\u4E00-\u9FA5]'
match = re.findall(pattern, string)
print(match) # ['中', '文']
上面的代码中,字符集 [\u4E00-\u9FA5]
匹配 Unicode 编码在 \u4E00
到 \u9FA5
之间(即 GB2312 汉字编码范围)。re.findall(pattern, string)
返回所有匹配结果。
3.2 使用 Unicode 字符转义字符匹配
可以使用 Unicode 字符转义字符来匹配一个 Unicode 字符。
例如,以下正则表达式匹配 Unicode 编码为 \u4E2D
的字符:
import re
string = '中文'
pattern = r'\u4E2D'
match = re.findall(pattern, string)
print(match) # ['中']
上面的代码中,\u4E2D
是 Unicode 字符转义字符,匹配 Unicode 编码为 \u4E2D
的字符。re.findall(pattern, string)
返回所有匹配结果。
3.3 使用 re.UNICODE 标志匹配 Unicode 字符
re 模块提供了 re.UNICODE
标志,可以在匹配时启用 Unicode 匹配模式。
例如,以下正则表达式匹配 Unicode 编码为 \u4E2D
的字符:
import re
string = '中文'
pattern = r'\u4E2D'
match = re.findall(pattern, string, re.UNICODE)
print(match) # ['中']
上面的代码中,re.UNICODE
标志启用了 Unicode 匹配模式。re.findall(pattern, string, re.UNICODE)
返回所有匹配结果。
4. 在 Python 中使用 Unicode 字符
在 Python 中,通过 Unicode 编码表示字符串中的 Unicode 字符,可以使用 \u
加上 4 位 16 进制数的形式。
例如:
s = '中文'
print(s) # 中文
s = '\u4E2D\u6587'
print(s) # 中文
在 Python 3 中,字符串默认采用 Unicode 编码,可以包含任意的 Unicode 字符。
4.1 Unicode 字符串
Python 3 中新增了一种字符串类型,称为 Unicode 字符串,可以直接使用 Unicode 编码表示字符串。
以下是 Unicode 字符串的示例:
s = '\u4E2D\u6587'
print(s) # 中文
s = '\U0001F60A'
print(s) # ??
其中,\U
加上 8 位 16 进制数表示 Unicode 字符。
4.2 使用 encode()/decode() 方法
可以使用字符串的 encode() 方法将 Unicode 字符串转换为指定的字符集编码,使用 decode() 方法将指定编码的字符串转换为 Unicode 字符串。
s = '中文'
print(s.encode('utf-8')) # b'\xe4\xb8\xad\xe6\x96\x87'
s = b'\xe4\xb8\xad\xe6\x96\x87'
print(s.decode('utf-8')) # 中文
上面的代码中,s.encode('utf-8')
将 Unicode 字符串编码为 UTF-8 编码,s.decode('utf-8')
将 UTF-8 编码的字符串解码为 Unicode 字符串。
4.3 使用 ord()/chr() 函数
可以使用函数 ord() 将指定的字符转换为 Unicode 编码,使用函数 chr() 将指定的 Unicode 编码转换为字符。
c = '中'
print(hex(ord(c))) # 0x4e2d
c = chr(0x4e2d)
print(c) # 中
上面的代码中,hex(ord(c))
将字符 '中' 转换为 Unicode 编码,并输出其 16 进制表示。chr(0x4e2d)
将 Unicode 编码 0x4e2d 转换为字符。
5. 结论
本文介绍了 Unicode 编码和字符的组成、如何匹配 Unicode 字符,以及如何在 Python 中使用 Unicode 字符。Unicode 解决了字符集和编码问题,使得字符可以被正确地表示和传输。在 Python 中,字符串默认采用 Unicode 编码,并提供了多种方式来表示 Unicode 字符和匹配 Unicode 字符。使用 Unicode 字符时,应该注意使用正确的编码方式和匹配模式。