Python: lower () vs. casefold () en la concordancia de cadenas y la conversión a minúsculas

¿Cómo hago una comparación de cadenas insensible a mayúsculas y minúsculas?

Por lo que entendí de Google y el enlace anterior, ambas funciones: lower() y casefold() convertirán la cadena a minúsculas, pero casefold() convertirán incluso las letras sin casillas como ß en alemán a ss .

Todo eso sobre las letras griegas, pero mi pregunta en general:

  • ¿Hay alguna otra diferencia?
  • ¿Cuál es mejor convertir a minúsculas?
  • ¿Cuál es mejor para comprobar las cadenas coincidentes?

Parte 2:

 firstString = "der Fluß" secondString = "der Fluss" # ß is equivalent to ss if firstString.casefold() == secondString.casefold(): print('The strings are equal.') else: print('The strings are not equal.') 

En el ejemplo anterior debería usar:

lower() # the result is not equal which make sense to me

O:

 casefold() # which ß is ss and result is the # strings are equal. (since I am a beginner that still does not # make sense to me. I see different strings). 

Casefolding es una versión más agresiva de lower () que se configura para hacer que muchos de los caracteres Unicode más únicos sean más comparables. Es otra forma de normalizar el texto que inicialmente puede parecer muy diferente, pero toma en cuenta los caracteres de muchos idiomas diferentes.

Le sugiero que analice detenidamente qué es realmente el plegado de casos, así que aquí tiene un buen comienzo: Wiki de plegado de caja W3

Para responder a sus otras dos preguntas, si está trabajando estrictamente en el idioma inglés, lower () y casefold () deberían producir exactamente los mismos resultados. Sin embargo, si está intentando normalizar el texto de otros idiomas que usan más que nuestro simple alfabeto de 26 letras, usaría casefold () para comparar sus cadenas, ya que producirá resultados más consistentes.

Otra fuente: Elastic.co Case Folding

Edit: Recientemente encontré otra muy buena respuesta relacionada a una pregunta ligeramente diferente aquí en SO (haciendo una comparación de cadenas que no distingue entre mayúsculas y minúsculas)