String harmonization in Python
Note: this is more frequently called canonicalisation than harmonisation.  URLify and URL-safe are also terms that can help you in your search.

whitespace
Combining the built-in functions string.split + string.join is a solid way to canonicalise intermediate and trailing whitespace, including tabs, carriage returns and so on.

non-ASCII chars
ASCIIification is actually somewhat contrary to canonicalisation.  That is, you should think hard about whether you really want to be converting 'München' to 'muenchen', rather than 'muenchen' to proper 'München'.

If you do want to go in that direction, you should give more details on the use case and the desired conversions.  Here are some examples of possible input:


  Where is Münsterstraße?
  ısparta'daki istanbul'dakı ve gülenciler!
  Isparta'daki İstanbul'dakı ve Gülenciler!
  ¿Cómo está?
  Это вообще фарс...
  Биће белајааа, чорба
  Biće belajaaa, čorba
  You can now resume your résumé.


Converting to ASCII will be lossy and there are some decisions to make, often dependent on the source and target language.

If you define the likely input, scope and desired behaviour then others can make recommendations.