1、需求?
我们正在同Unicode字符串打交道,但需要确保所有的字符串都拥有相同的底层表示。
2、解决方案?
在Unicode中,有些特定的字符可以被表示成多种合法的代码点序列。为了说明这个问题,请看下面示例:
str1='\u00f1'
str2='n\u0303'
str3='\u0303'
print(str1)
print(str2)
print(str3)
print(str1==str2)
print(len(str1))
print(len(str2))
运行结果:
ñ
ñ
̃
False
1
2
Python资源分享qun 784758214 ,内有安装包,PDF,学习视频,这里是Python学习者的聚集地,零基础,进阶,都欢迎
这里的文本ñ是以两种形式呈现:
- 第一种使用的是字符ñ的【全组成】形式:U+00F
- 第二种使用的是拉丁字母n紧跟着一个“~”,【组合】而成的字符:U+0303
对于一个比较字符串的程序来说,同一个文本拥有多种不同的表示形式是个大问题。为了解决这个问题,应该先将文本同一表示为规范形式,这可以通过unicodedata模块来完成。
实例:
import unicodedata
str1='\u00f1'
str2='n\u0303'
t1=unicodedata.normalize(&