Ответ 1
Casefolding - более агрессивная версия lower()
которая настроена на то, чтобы сделать многие из более уникальных символов юникода более сопоставимыми. Это еще одна форма нормализации текста, которая на первый взгляд может показаться сильно отличающейся, но она учитывает символы разных языков.
Я предлагаю вам поближе взглянуть на то, что на самом деле представляет собой сворачивание кейсов, так что вот хорошее начало: W3 Case Folding Wiki
Чтобы ответить на два других вопроса, если вы работаете строго на английском языке, lower()
и casefold()
должны давать точно такие же результаты. Однако, если вы пытаетесь нормализовать текст из других языков, которые используют больше, чем наш простой 26-буквенный алфавит (используя только ASCII), я бы использовал casefold()
для сравнения ваших строк, поскольку это даст более согласованные результаты.
Другой источник: Elastic.co Case Folding
Изменение: я только недавно нашел другой очень хороший связанный ответ на немного другой вопрос здесь, на SO (сравнение строк без учета регистра)