当前位置:  开发笔记 > 编程语言 > 正文

看起来相同但编码不同的字符串

如何解决《看起来相同但编码不同的字符串》经验,为你挑选了1个好方法。

我有两个文件:file1.csv和file2.csv,每个文件都在第一行和唯一一行写有名称"Aarão".file1.csv是从Google电子表格的"导出为"生成的; 而file2.csv是由我手动创建的,使用nano.两个文件都以utf-8编码:

file -I file1.csv 
file1.csv: text/plain; charset=utf-8

file -I file2.csv 
file2.csv: text/plain; charset=utf-8

当我用nano打开它们时,两者看起来都相等,但实际上是不同的:

>>> with io.open('file1.csv','r',encoding = 'utf8') as f1:
...     for line in f1:
...             word1 = line 
... 
>>> word1
u'Aara\u0303o\n'
>>> 
>>> with io.open('file2.csv','r',encoding = 'utf8') as f2:
...     for line in f2:
...             word2 = line
... 
>>> word2
u'Aar\xe3o\n'

那么,我该如何纠正这个问题,即将一个转换为另一个,以便我可以检查它们是否是同一个单词?(在python中)



1> PM 2Ring..:

正如deceze,Serge和Simon所提到的,ã字形可以用组合形式表示:单个代码点(ã字符的代码点),或者以分解形式表示:两个代码点(代码点a后跟代码点)结合代字号).

要在组合和分解的表单之间进行转换,您可以使用模块中的normalize函数unicodedata.这是一个简短的Python 2演示.

import unicodedata as ud

s = u"Aarão"
print repr(s)

decomp = ud.normalize('NFD', s)
print repr(decomp)

comp = ud.normalize('NFC', decomp)
print repr(comp), comp == s

产量

u'Aar\xe3o'
u'Aara\u0303o'
u'Aar\xe3o' True

推荐阅读
路人甲
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有