Python实用技法第28篇:将Unicode文本统一表示为规范形式

本文介绍了在处理Unicode字符串时遇到的不同表示形式问题,并通过Python的unicodedata模块展示了如何将文本规范化为全组成(NFC)或组合(NFD)形式,以及NFKC和NFKD的兼容规范化。规范化对于确保字符串一致性和处理用户输入至关重要,特别是在文本过滤和净化场景中。
摘要由CSDN通过智能技术生成

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(&
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值