1.2.2. NFC¶
NFC(Normalization Form Composition,标准组合形式)是 Unicode 标准化中的一种形式,主要用于将字符组合为其最标准的形式,以便实现一致的文本表示。
特点¶
规范组合:NFC 会将已分解的字符组合成标准的、预组合的形式。例如,将分解形式的字符 e + ́(重音符)组合成单一的字符 “é”。
最小化冗余:相比完全分解的形式(如 NFD),NFC 更紧凑,能减少字符数量,并保持文本简洁。
NFC非常适合用于文本存储、数据传输和字符串比较等场合。在这些情况下,保持字符表示的一致性对于避免错误和歧义至关重要。
适用场景¶
【总结】NFC 是一种更简洁的形式,适合于需要保持字符一致性、简化存储和处理的场景。
存储和数据库:在数据库中存储文本时,使用NFC可以确保字符的一致性和简洁性,因为它将合成字符保存为单一的字符形式,减少存储空间。
用户界面:在用户界面中展示文本时,使用NFC可以确保用户看到的字符是合成的形式,更符合自然语言的书写习惯。
文本比较:当需要比较来自不同来源的字符串时,使用NFC能够提高比较的准确性,因为它会将相同的字符以统一的形式呈现。
文本处理:在处理多语言文本时,NFC有助于简化文本操作,避免因字符表示不同而导致的问题。
示例¶
示例-“é”:
在NFC中,"é" 会被表示为单个预组合字符 U+00E9
在NFD(Normalization Form D)中,"é" 会被分解为基本字符 "e" (U+0065) 加上重音符号 (U+0301)
代码实现:
import unicodedata
# 示例字符串
s1 = 'café'
s2 = 'cafe\u0301' # 分解形式
# 使用NFC规范化
normalized_s1 = unicodedata.normalize('NFC', s1)
normalized_s2 = unicodedata.normalize('NFC', s2)
print(normalized_s1) # 输出: café
print(normalized_s2) # 输出: café
# 比较规范化后的字符串
print(normalized_s1 == normalized_s2) # 输出: True