It's not quite so black and white:
character 58 : valid for a path, but invalid for an actual file
character 32 space valid in filenames
character 59 ; invalid in filename
character 60 < invalid in filename
character 62 > invalid in filename
character 63 ? invalid in filename
in addition to that, pretty much all the international characters are also perfectly valid for files: ïîìÄÅÉæÆôöò and many others. In English they may be unheard of, but many other languages commonly use at least a few of them - German, French, Spanish, Swedish, Norwegian, etc.
character 58 : valid for a path, but invalid for an actual file
character 32 space valid in filenames
character 59 ; invalid in filename
character 60 < invalid in filename
character 62 > invalid in filename
character 63 ? invalid in filename
in addition to that, pretty much all the international characters are also perfectly valid for files: ïîìÄÅÉæÆôöò and many others. In English they may be unheard of, but many other languages commonly use at least a few of them - German, French, Spanish, Swedish, Norwegian, etc.