【python cookbook】【字符串与文本】9.将Unicode文本统一表示为规范形式
问题:确保所有的Unicode字符串都拥有相同的底层
解决方案:为解决同一个文本拥有多种不同的表示形式问题,应该先将文本统一表示为规范形式,这可以通过unicodedata模块来完成,
unicodedata.normalize(字符串规定采用的规范,字符串)。
在Unicode中,有些特定的字符可以被表示成多种合法的代码点序列。
NFC:表示全组成的字符(即,如果可能的话就使用单个代码点);
NFD:表示组合字符,每个字符应该能完全分解开;
s1 = 'Spicy Jalape\u00f1o' #Spicy Jalapeño使用的是字符“ñ” 的全组成形式(U+00F1)
s2 = 'Spicy Jalapen\u0303o' #Spicy Jalapeño使用的是拉丁字母“n”紧跟着一个“~”组合而成的字符(U+0303) # (a) Print them out (usually looks identical)
print(s1)
print(s2) # (b) Examine equality and length
print('s1 == s2 ?', s1 == s2)
print('len(s1)=',len(s1), 'len(s1)=',len(s2))
print ('---------------------------')
# (c) Normalize and try the same experiment
import unicodedata n_s1 = unicodedata.normalize('NFC', s1)
n_s2 = unicodedata.normalize('NFC', s2) print('n_s1 == n_s2 ?', n_s1 == n_s2)
print('len(n_s1)=',len(n_s1), 'len(n_s2)',len(n_s2))
print ('*****************************')
# (d) Example of normalizing to a decomposed form and stripping accents
t1 = unicodedata.normalize('NFD', s1)
t2 = unicodedata.normalize('NFD', s2)
print ('t1 == t2 ?',t1==t2)
print ('len(t1)=',len(t1),'len(t2)=',len(t2))
print(''.join(c for c in t1 if not unicodedata.combining(c)))
>>> ================================ RESTART ================================
>>>
Spicy Jalapeño
Spicy Jalapeño
s1 == s2 ? False
len(s1)= 14 len(s1)= 15
---------------------------
n_s1 == n_s2 ? True
len(n_s1)= 14 len(n_s2) 14
*****************************
t1 == t2 ? True
len(t1)= 15 len(t2)= 15
Spicy Jalapeno
>>>
补充:
在对文本进行过滤和净化时,规范化同样也占据了重要的部分。假设想从某些文本中去除所有的音符标记(可能为了搜索或匹配):
t1 = unicodedata.normalize('NFD', s1)
print(''.join(c for c in t1 if not unicodedata.combining(c))) unicodedata.combining()对字符做检查,判断它是否文一个组合型字符
这个例子展示了unicodedata模块的另一个重要功能:用来判断字符是否属于某个字符类型;
【python cookbook】【字符串与文本】9.将Unicode文本统一表示为规范形式的更多相关文章
- python cookbook 字符串和文本
使用多个界定符分隔字符串 import re line = 'asdf fjdk; afed, fjek,asdf, foo' print(re.split(r'[;,\s]\s*', line)) ...
- python书籍推荐:Python Cookbook第三版中文
所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/44/ 来源:python黑洞网 内容 ...
- python基础——字符串
Python的核心数据类型--字符串 常见字符串常量和表达式 操作 解释 s = '' 空字符串 s = "dodo's" 双引号和单引号 s = 'd\no\p\td\x00o' ...
- Python Cookbook(第3版)中文版:15.14 传递Unicode字符串给C函数库
15.14 传递Unicode字符串给C函数库¶ 问题¶ 你要写一个扩展模块,需要将一个Python字符串传递给C的某个库函数,但是这个函数不知道该怎么处理Unicode. 解决方案¶ 这里我们需要考 ...
- 【python cookbook】【字符串与文本】6.以不区分大小写的方式对文本做查找和替换
问题:以不区分大小写的方式对文本做查找和替换 解决方法:使用re模块,并对各种操作都添加上re.IGNORECASE标记 text='UPPER PYTHON,lower python,Mixed P ...
- Python:字符串
一.序列的概念 序列是容器类型,顾名思义,可以想象,“成员”们站成了有序的队列,我们从0开始进行对每个成员进行标记,0,1,2,3,...,这样,便可以通过下标访问序列的一个或几个成员,就像C语言中的 ...
- python cookbook学习1
python cookbook学习笔记 第一章 文本(1) 1.1每次处理一个字符(即每次处理一个字符的方式处理字符串) print list('theString') #方法一,转列表 结果:['t ...
- python基础——字符串和编码
python基础——字符串和编码 字符串也是一种数据类型,但是,字符串比较特殊的是还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用 ...
- Python 的字符串
Python 的字符串 在最新的 Python 3 版本中,字符串是以 Unicode 编码的,也就是说,Python 的字符串支持多语言,例如: print('包含中文的 str') 对于单个字符的 ...
随机推荐
- WebApi接口传参不再困惑(4):传参详解 一、get请求 二、post请求 三、put请求 四、delete请求 五、总结
前言:还记得刚使用WebApi那会儿,被它的传参机制折腾了好久,查阅了半天资料.如今,使用WebApi也有段时间了,今天就记录下API接口传参的一些方式方法,算是一个笔记,也希望能帮初学者少走弯路.本 ...
- 利用Axis2默认口令安全漏洞可入侵WebService网站
利用Axis2默认口令安全漏洞可入侵WebService网站 近期,在乌云上关注了几则利用Axis2默认口令进行渗透测试的案例,大家的渗透思路基本一致,利用的技术工具也大致相同,我在总结这几则案例的基 ...
- 线性空间光照(即Gamma)
在渲染管线中正确使用Gamma校正是决定渲染效果的一个非常重要的因素,现在商业引擎包括很多国内引擎都已经是在线性空间计算光照.当然也包括我们之前公司设计的引擎.关于gamma校正的定义可以查看wiki ...
- 移动端<head>头部 常用<meta>标签
<!DOCTYPE html><html lang = ""><head> <title></title> <me ...
- linux:档案权限
一.例如:-rw-r--r--. 1 root root 129 Dec 29 2013 .tcshrc 详细: 1.-rw-r--r--:档案类型和权限(总共十个栏位) 1.1:第一个栏位代表 ...
- Silverlight动画显示Line线
目的:在silverlight中显示两点之间的连线,要求动画显示连线效果. 如果需实现动画效果不得不了解,Storyborad对象: Storyboard Silverlight 通过时间线控制动 ...
- ADO.net 实体类 、数据访问类
程序分三层:界面层.业务逻辑层.数据访问层 比较规范的写程序方法,要把业务逻辑层和数据访问层分开,此时需要创建实体类和数据访问类 实体类: 例 using System; using System.C ...
- web 前端:连接mysql中文乱码问题的解决办法
当使用tomcat部署servlet连接时,总是出现各种原因的中文乱码问题.有的是因为mysql的默认字符集的问题,有的是客户端的字符配置问题. 现在对于这两种问题进行配置,来解决乱码. 服务器端(m ...
- 树形DP 2013多校8(Terrorist’s destroy HDU4679)
题意: There is a city which is built like a tree.A terrorist wants to destroy the city's roads. But no ...
- Uva 11538 - Chess Queen
http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&p ...