This (different forms and no automatic normalization) is a "feature" of Unicode. It would be wrong of Python to try to cover it up.
visually_empty(s) is okay, len(s) is probably not.
[0]: When I say 'lists', I mean whatever the standard idea of a sequence of things is in the language. For C that's the array, or maybe the pointer+length pair. For Go it's a slice. For Rust, an iterator perhaps? For Python, it's a list.