The characters that are not allowed in a file name are:
< (less than)
> (greater than)
: (colon)
" (double quote)
/ (forward slash)
\ (backslash)
| (vertical bar or pipe)
? (question mark)
* (asterisk)
according to Microsoft Naming Conventions.
Is that what you were referring to?
The reason is probably because it would be too hard to deal with files with those characters in them in the old command.com shell, e.g. ? also means any one character, * also means any file, etc.
Rather than teach everyone how to handle those special cases, they disallowed it, making it easier to script.
There wouldn't be Unicode equivalents for those characters, and if there was an equivalent, it still wouldn't solve that problem: the existing ASCII ? and * would still have to work as wildcards, otherwise everyone would have to re-write their scripts.