本文主要是介绍【Python Cookbook】S02E09 将 Unicode 文本统一表示为规范形式 NFD、NFC,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
目录
- 问题
- 解决方案
- 讨论
问题
在 Unicode 中,有一些字符可以以多种方式来呈现。对于这种同一个文本拥有多种不同的表示形式应该如何解决?本文将进行探索。
解决方案
例如文本 Spicy Jalapeño,有两种方式呈现:
- 第一种是全组成方式(U+00F1)
- 第二种是拉丁字母与符号的组成方式(U+0303)
s1 = 'Spicy Jalape\u00f1o'
s2 = 'Spicy Jalapen\u0303o'
print("s1:", s1)
print("s2:", s2)print(s1 == s2)
print(len(s1))
print(len(s2))
结果:
s1: Spicy Jalapeño
s2: Spicy Jalapeño
False
14
15
对于不同形式却表示同一文本的问题,我们通过 unicodedata
模块解决:
import unicodedatat1 = unicodedata.normalize('NFD', s1)
t2 = unicodedata.normalize('NFD', s2)
print(t1 == t2)
代码中 normalize()
函数的第一个参数 NFD
表示应该使用组合字符,即上文中提到的第二种表现方法。相比之下,NFC
则表示使用全组成,即上文中提到的第一种表现方法。
import unicodedatat11 = unicodedata.normalize('NFC', s1)
t22 = unicodedata.normalize('NFC', s2)print(len(t11))
print(t11 == t22)
结果:
14
True
讨论
需要注意的是,Python 还支持 NFKC
以及 NFKD
两种规范表示形式。
这篇关于【Python Cookbook】S02E09 将 Unicode 文本统一表示为规范形式 NFD、NFC的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!