由于不同的字符编码,查找唯一元素的代码给出了重复的元素

Code to find unique elements gives duplicate elements due to different character-encoding

我有一个包含重复名称列表的文本文件(其中一些带有重音字母,如 é、à、î 等)

例如列表:Précilia、Maggie、Précilia

我需要编写一个代码来输出唯一名称。

但是,我的文本文件似乎对两次出现的 Précilia 中的两个重音符 é 具有不同的字符编码(我猜一个可能是 ASCII,另一个可能是 UTF-8)。因此,我的代码将两次出现的 Précilia 作为不同的唯一元素给出。您可以在下面找到我的代码:

 seen = set()
 with open('./Desktop/input1.txt') as infile:
     with open('./Desktop/output.txt', 'w') as outfile:
         for line in infile:
             if line not in seen:
                 outfile.write(line)
                 seen.add(line)

预期输出:Prècilia、Maggie

实际输出和错误输出:Prècilia、Maggie、Prècilia

更新:原文件是一个非常大的文件。我需要一种方法将这两个事件视为一个事件。

所以老板建议我们使用Unicode Normalization 来替换等价的字符序列,这样任何两个等价的文本都会被简化为相同的代码点序列,称为原始文本的规范化形式或规范形式。

可以在 https://withblue.ink/2019/03/11/why-you-need-to-normalize-unicode-strings.html and https://github.com/aws/aws-cli/issues/1639

上找到更多详细信息

截至目前,我们的测试用例取得了积极的成果,希望我们的主要数据集也能适用。