我有两个文件: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中)
正如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