This is an old revision of the document!
Note : this page often uses "Unix" for non-Windows systems, because Mac OS and Linux are both Unix-based systems. And the Web standard also originated on Unix systems, so for example, it's path separator is the same "/".
The Windows Powershell (v. 2 in Win7) has a function `GetInvalidFileNameChars()` :
[System.IO.Path]::GetInvalidFileNameChars() | ForEach-Object {$i=[int]$_; '{0,3} {1:X2} {2}' -f $i,$i,$_ } | Sort-Object
0 00
1 01 ☺
2 02 ☻
3 03 ♥
4 04 ♦
5 05 ♣
6 06 ♠
7 07
8 08
9 09
10 0A
11 0B ♂
12 0C ♀
13 0D
14 0E ♫
15 0F ☼
16 10 ►
17 11 ◄
18 12 ↕
19 13 ‼
20 14 ¶
21 15 §
22 16 ▬
23 17 ↨
24 18 ↑
25 19 ↓
26 1A →
27 1B ←
28 1C ∟
29 1D ↔
30 1E ▲
31 1F ▼
34 22 "
42 2A *
47 2F /
58 3A :
60 3C <
62 3E >
63 3F ?
92 5C \
124 7C |
So it lists the obvious control characters 0 to 31 (x00-x1F), plus
Mac OS in the eighties and nineties (up to version 9) was not a Unix-based system, and used ":" as a path separator. "/" had no special meaning for Macs, so it was accepted in file names like "report 25/3/1992".
When Mac replaced it's OS with Unix, "/" became an invalid character in file names, but on the other hand, ":" was now a perfectly normal character. So it decided to silently replace all "/" with ":", and made it's graphical interface handle the translation invisibly. So you can still see this "report 25/3/1992" file in the Finder, and you can have the impression that you can still write a file named "report 25/12/2019". However, the real file name in the file system will be "report 25:3:1992", and some Mac programs will only see the real file name and not "translate" it on the fly.