Строки в Python не равны из-за немецкого Умлаута - PullRequest
0 голосов
/ 24 января 2020

Я попытался сравнить со строками, оба содержали немецкий умлаут "ü". Оба выглядят в буквальном смысле одинаково, также нет конечного \n или чего-то подобного.

enter image description here

Один из этих битов читается из xml -Файл, другой из файловой системы. Сравнивая их буква за буквой, показывает разницу с умлаутом.

enter image description here

Искаженный умлаут (состоящий из двух букв, обычного u и двух верхних точек ) исходит из файловой системы. Я использую macOS High Sierra и работаю Python 3.7. Имя файла читается с использованием os.listdir ().

Буду признателен за предложения по устранению этого странного поведения (избавиться от «ü» не вариант).

1 Ответ

3 голосов
/ 24 января 2020

Вместо непосредственного сравнения строк, сравните их unicodedata.normalize результаты, учитывая тот же form параметр

Из документации: Сравнение строк

Второй инструмент - это функция normalize () модуля unicodedata, которая преобразует строки в одну из нескольких нормальных форм, где буквы, за которыми следует символ объединения, заменяются одиночными символами. normalize () может использоваться для сравнения строк, которое не будет ложно сообщать о неравенстве, если две строки по-разному объединяют символы

import unicodedata

def compare_strs(s1, s2):
    def NFD(s):
        return unicodedata.normalize('NFD', s)

    return NFD(s1) == NFD(s2)
...