Yep. use proper tools. Filenames with whitespace need to be properly either put inside quotes, or escaped (with a backslash, for instance). Not rocket science.
For the purpose of generality, while not making it too horribly complex to implement (which *always* makes the probability of having bugs much higher), case-sensitive and character-agnostic, except for the very few path separator characters, is IMO the way to go. So, basically the unix-like approach.
Now 'whitespace' can still be questioned. The problem again if you exclude whitespace, is that, if we want to support Unicode (and not doing so is absolutely impossible if you live outside of the USA or maybe UK too, or otherwise you get back to the infamous code pages, *vomits*), whitespace could come in other forms than just the 0x20 ASCII character... Now granted that most command-line tools for most OSs, and in particular shells, only see the ASCII whitespace characters as whitespace, and the rest as regular characters - well, that is, if they even support Unicode. Sometimes that's a bit iffy.
But as with the case-insensitivity matter, it's in the end all in the UI. The filenames in "clear" are ONLY for the purpose of UI. Otherwise, a filesystem could just use a GUID for identifying a file, and move on.
But case-insensitivity is the worst thing to handle IMO. There are just too many possibilities if you want to support Unicode as a whole (and if you don't, you're just ignoring a big part of the planet), and it's a big mess, while, as I said, if you mess up the upcasing, it would not just be a cosmetic issue: it would render accessing some files impossible. Awful.
So all in all, while all of this is trivial using pure ASCII, it becomes almost intractable if you want to do it 100% correctly in Unicode. It's horrible.